2017-05-26 51 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