私たちは、レポート生成のために使用されるライブラリを持っています。なお、日時は、ユーザ記述された式に変更してもよいし、レポート出力に指定され、それがフォーマットされ、データファイル(SQL、XML、JSON、等)から読み込みます。
式で使用するには、タイムスパンを追加し、「もしdate.month == 2」のように値の一部を取得し、かなりのことができるExcelですべての日時マクロ。
データはJSON(又は全くスキーマを持つXML)であることができるので、日時は、 "2019-01-25T14:32:23" "2019年1月25日" であることができる、 "2019-01-25T14:32:23.12345"、 " 2019-01-25T14:32:23Z "または "2019-01-25T14:32:23Z-0500"(また、0.12345" 最後の2つ持つことができます")。
何のタイムゾーンはありませんならば、我々は日時がUTCであると仮定オフセット。それが本当である必要がありますが、多くの場合、そうではありません、それは現地時間ですが、それが使われている方法は、それは問題ではありません。タイムゾーンのオフセットは、作品を指定されていない限り、それUTCを作るように、(今まで私たちは、使用されている日付をしました)。
最初の質問 - 私はこの値を保持するためにどのようなクラスを使用する必要がありますか?私が何を読んでから私はZonedDateTimeと思いますが、多分インスタント?
2番目の質問 - 私はdatetime型に追加する3日のような何かをしなければならないとき、どのようなクラスIタイムスパンのために使うべきでしょうか?
3番目の質問 - 私は上記のように、すべての異なる文字列を解析することができますいくつかのパーサはありますか?それとも、私はそれに基づいて明示的なパターンをフォーマットを決定してから行うようにString.contains()を呼び出す必要がありますか?もしそうなら、どのようなクラスを使用していますか?
3番目の質問 - 私は上記のように、すべての異なる文字列を解析することができますいくつかのパーサはありますか?それとも、私はそれに基づいて明示的なパターンをフォーマットを決定してから行うようにString.contains()を呼び出す必要がありますか?もしそうなら、どのようなクラスを使用していますか?
私は恐ろしい間違っているかもしれないが、あなたは使用することができDateTimeFormatter
、パターンと上のオプションパーツでparseBestの方法:
List<String> dates = List.of(
"2019-01-25",
"2019-01-25T14:32:23",
"2019-01-25T14:32:23.12345",
"2019-01-25T14:32:23Z",
"2019-01-25T14:32:23Z-0500"
);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"yyyy-MM-dd['T'[HH:mm:ss][.SSSSS]][z][x]"
); // all the possible combinations
dates.forEach( date -> {
TemporalAccessor accessor = formatter.parseBest(date,
OffsetDateTime::from, // going from most specific date
LocalDateTime::from,
LocalDate::from); // to the less specific
System.out.println( accessor.getClass() + " " + accessor);
}
);
// output for this is
class java.time.LocalDate 2019-01-25
class java.time.LocalDateTime 2019-01-25T14:32:23
class java.time.LocalDateTime 2019-01-25T14:32:23.123450
class java.time.OffsetDateTime 2019-01-25T14:32:23Z
class java.time.OffsetDateTime 2019-01-25T14:32:23-05:00