TL;博士
LocalDateTime ldt = LocalDateTime.parse ("1515010" , DateTimeFormatter.ofPattern ("yyDHH"));
LocalDate ld = LocalDate.parse ("15150" , DateTimeFormatter.ofPattern ("yyD"));
不朱利安...順序日期
使用「朱利安」一詞對於有序天的年數是不是技術上是正確的,但通常仍然使用。我建議你避免與實際的Julian date混淆,並堅持準確的術語ordinal date或「日年」。
java.time
的java.time框架構建在Java 8和更高版本可以在這裏幫助。下面的代碼示例證明,您的場景(有或沒有每日時間)在java.time中正確工作。
這些java.time類代替了舊的麻煩的日期時間類,如java.util.Date
。見Oracle Tutorial。許多功能已被移植到ThreeTen-Backport中的Java 6 & 7中,並進一步適用於Android的ThreeTenABP。
用DateTimeFormatter
類定義格式化程序模式。格式化代碼與SimpleDateFormat
類似,但不完全相同,因此請研究類文檔。通過這門課程,如果省略了世紀,則假定21世紀(20xx
)。
String input = "1515010";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ("yyDHH");
LocalDateTime ldt = LocalDateTime.parse (input , formatter);
A LocalDateTime
缺少任何時區或偏移UTC信息。所以它不是而是代表了時間軸上的一個時刻。如果我們可以假設此輸入旨在處於UTC時區的上下文中,則轉換爲OffsetDateTime
。
OffsetDateTime odt = ldt.atOffset (ZoneOffset.UTC);
轉儲到控制檯。
System.out.println ("input: " + input + " | ldt: " + ldt + " | odt: " + odt);
輸入:1515010 | ldt:2015-05-30T10:00 | odt: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
我還沒有在Java中使用常規的Date類,所以我不能幫你做到這一點。但我一直使用支持[Julian日曆]的[Joda-Time圖書館](http://www.joda.org/joda-time/)(http://www.joda.org/joda -time/cal_julian.html)。所以如果本地Java庫不適合你,你可以考慮使用它。 –
首先,您應該避免使用java Date作爲Julian日曆。 Java Date API被破壞,尤其是涉及複雜的時間處理和計算(例如使用不同的日曆)時。 Java 8有一個新的時間API來修復這些問題,其中Date已被LocalDateTime取代。 Julian日曆在公曆8日由公曆執行。 https://docs.oracle.com/javase/8/docs/api/java/util/GregorianCalendar.html –
您能否澄清一下您對「Julian」一詞的理解?與Julian日曆或Julian日號碼有幾種完全不同的含義。 –