2017-05-26 52 views
2

對於其中一個項目,我從另一個系統獲得了一個毫秒。 我需要轉換爲 「YYYY-DDDT:HH:MM:SSZ格式化time4j時刻

訣竅是在閏秒來顯示它。

由於Java庫沒有閏秒,我決定用Time4J瞬間類。

但是瞬間toString()正在打印yyyy-MM-ddTHH:mm:ss

是否可以在Moment課程中獲得年的

是否有任何示例來創建自定義格式程序。我嘗試了一些包括ChronoFormatter。但無法獲得理想的結果。

一個討厭的解決方法是使用Calendar日期一部分,Moment時間一部分。

但是它很乏味,而且從String解析時會很困難。

回答

1

格式化或解析時刻/同一天的一年元素的時刻是與類Moment沒有特別的問題,可以通過選擇suitable pattern剛剛做了,看到這個演示了閏秒:

Moment ls = PlainTimestamp.of(2016, 12, 31, 23, 59, 59).atUTC().plus(1, SI.SECONDS); 
System.out.println(ls); // 2016-12-31T23:59:60Z 
ChronoFormatter<Moment> f = 
    ChronoFormatter.ofMomentPattern(
     "uuuu-DDD'T'HH:mm:ssX", PatternType.CLDR, Locale.ROOT, ZonalOffset.UTC); 
String text = f.format(ls); 
System.out.println(text); // 2016-366T23:59:60Z 
Moment parsed = f.parse(text); 
System.out.println(parsed.isSimultaneous(ls)); // true 

請記住,任何conversionMoment-對象例如java.time.Instantjava.util.Date將鬆散閏秒信息但是。

另一點:訪問類Moment中的一年級元素不是直接可能的,因爲一年中的某個本地元素與不具有區域偏移的通用時間無關,但可以通過編程方式完成如果你還指定了區域偏移或時區。例如:

System.out.println(ls.get(PlainDate.DAY_OF_YEAR.at(ZonalOffset.UTC))); // 366 

同樣的方法也可以應用於時間元素:

System.out.println(ls.get(PlainTime.SECOND_OF_MINUTE.at(ZonalOffset.UTC))); // 60 

關於最後一個例子:它只會在Moment環境中工作,但不在本地型PlainTime的情況下,當然。在處理類Moment時,閏秒支持深深植入了Time4J的各個級別,以編程方式以及格式化和解析。

+0

非常感謝你! – william