ミリ秒の精度が、オプションでマイクロ秒の精度を持つJava LocalDateTime.parse

シェーンRowatt:

以下のミリ秒の日付/時間が解析され、OKで少なくともミリ秒の精度が、オプションでマイクロ秒の精度、すなわちを持っていますが、マイクロ秒1で障害が発生した日付/時刻を解析するのLocalDateTimeパターンを作成する方法はあります。私は、「[」「]」は、この作業を可能にするパターンで、オプションの指標を考えました:

DateTimeFormatter DATE_TIME_FORMATTER = 
    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS[SSS]");
System.out.println(LocalDateTime.parse("2019-02-14 11:04:52.784", DATE_TIME_FORMATTER));     
System.out.println(LocalDateTime.parse("2019-02-14 11:04:52.784108", DATE_TIME_FORMATTER));
オレVV:

Hack no. 1

    String withMillis = "2019-02-14 11:04:52.784";
    String withMicros = "2019-02-14 11:04:52.784108";

    System.out.println(LocalDateTime.parse(withMillis.replace(' ', 'T')));
    System.out.println(LocalDateTime.parse(withMicros.replace(' ', 'T')));
2019-02-14T11:04:52.784
2019-02-14T11:04:52.784108

私たちは、あなたと、文字列の真ん中にスペースを交換するときはT、ISO 8601に準拠した文字列、その標準フォーマットLocalDateTime明示的なフォーマッタなしとされ、そのデフォルトとしてjava.timeパースの他のクラス(とも印刷)、 。だから、これは簡単なソリューションです。

Hack no. 2

あなたがしようとした何のようなものを仕事に行うことができます。あなただけがのシーケンスを分割することはできませんSSSSSS中央に角括弧で。

static final DateTimeFormatter DATE_TIME_FORMATTER = 
        DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.[SSSSSS][SSS]");

その後:

    System.out.println(LocalDateTime.parse(withMillis, DATE_TIME_FORMATTER));     
    System.out.println(LocalDateTime.parse(withMicros, DATE_TIME_FORMATTER));

私は、必要に応じて6小数し、次いで必要に応じて3小数を指定します。私たちは、その順序を必要としています。我々は置く場合[SSS][SSSSSS]と6つの小数を解析しようとすると、フォーマッタは最初の3を解析し、それが持つ残りの3を解析できないため、例外を投げますSSSSSS我々はそれを9つの小数を与えれば、それはまた全く小数で小数点を受け入れる、そしておそらく非常に混乱し、エラー・メッセージを発行する(または可能性さえ間違った結果を与える)しますので、それはハックのビットです。

良い解決策:ビルダーを使用

static final DateTimeFormatter DATE_TIME_FORMATTER = 
        new DateTimeFormatterBuilder().append(DateTimeFormatter.ISO_LOCAL_DATE)
                .appendLiteral(' ')
                .appendPattern("HH:mm:ss")
                .appendFraction(ChronoField.NANO_OF_SECOND, 1, 9, true)
                .toFormatter();

ここでは、小数点以下1の最小値および9つの小数の最大値を指定しています。ご希望の場合は3と6を指定することができます。それはもちろん、あまりにも4または5を受け入れます。

リンク: ウィキペディアの記事:ISO 8601

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=232158&siteId=1