tl;dr
LocalDateTime ldt = LocalDateTime.parse ( "1515010" , DateTimeFormatter.ofPattern ( "yyDHH" ) );
LocalDate ld = LocalDate.parse ( "15150" , DateTimeFormatter.ofPattern ( "yyD" ) );
ジュリアンではありません…序数の日付
通年の序数に「ユリウス」という用語を使用することは、技術的には正しくありませんが、それでも一般的に使用されています。実際のユリウス日とのあいまいさや混乱を避け、正確な序数の日付または「年間通算日」という用語に固執することをお勧めします。
java.time
ここでは、Java 8 以降に組み込まれているjava.timeフレームワークが役立ちます。以下のコード例は、両方のシナリオ (時間帯を使用する場合と使用しない場合) が java.time で正しく機能することを証明しています。
これらの java.time クラスは、java.util.Date
. Oracle チュートリアルを参照してください。機能の多くは、 ThreeTen-Backportで Java 6 および 7 にバックポートされ、さらにThreeTenABPで Android に適合されています。
クラスでフォーマッタ パターンを定義しDateTimeFormatter
ます。フォーマット コードは のものと似ていますがSimpleDateFormat
、まったく同じではないため、クラスのドキュメントを調べてください。このクラスでは、世紀を省略した場合、21 世紀 ( 20xx
) が想定されます。
String input = "1515010";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "yyDHH" );
LocalDateTime ldt = LocalDateTime.parse ( input , formatter );
ALocalDateTime
には、タイム ゾーンまたは UTC からのオフセット情報がありません。したがって、タイムライン上の瞬間を表すものではありません。この入力が UTC タイム ゾーンのコンテキストで意図されていると想定できる場合は、OffsetDateTime
.
OffsetDateTime odt = ldt.atOffset ( ZoneOffset.UTC );
コンソールにダンプします。
System.out.println ( "input: " + input + " | ldt: " + ldt + " | odt: " + odt );
入力: 1515010 | ldt: 2015-05-30T10:00 | 奇数: 2015-05-30T10:00Z
時刻もタイムゾーンもない日付のみの値の場合、 をインスタンス化しLocalDate
ます。
String input = "15150";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "yyD" );
LocalDate ld = LocalDate.parse ( input , formatter );
コンソールにダンプします。
System.out.println ( "input: " + input + " | ld: " + ld );
入力: 15150 | ld: 2015-05-30