格式化时间4j时刻



对于其中一个项目,我从另一个系统得到了一毫秒。 我需要转换为">yyyy-DDDT:HH:mm:ssZ">

诀窍是用闰秒显示它。

由于Java库没有闰秒,我决定使用Time4JMoment类。

MomenttoString()是打印yyyy-MM-ddTHH:mm:ss

是否可以在时刻课程中获得一年中的一天

是否有任何示例可以创建自定义格式化程序。我尝试了一些包括ChronoFormatter.但无法得到预期的结果。

一种令人讨厌的解决方法是将Calendar用于日期部分,Moment用于时间部分。

但这很乏味,并且在从 String 解析回来时会很困难。

使用元素一年中的一天格式化或解析时刻/瞬间对于类Moment来说不是特别的问题,只需选择合适的模式即可完成,请参阅此演示以获取闰秒:

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

请记住,任何将Moment对象转换为例如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的上下文。闰秒支持深深嵌入在Time4J的所有级别上,当处理类Moment时,以编程方式以及格式化和解析。

最新更新