3

对于其中一个项目,我从另一个系统获得了一毫秒的时间。我需要转换为“ yyyy-DDDT:HH:mm:ssZ

诀窍是在闰秒中显示它。

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

Moment 'stoString()正在印刷yyyy-MM-ddTHH:mm:ss

是否有可能在 Moment 课程中获得一年中的某一天?

有没有创建自定义格式化程序的示例。我尝试了一些,包括ChronoFormatter. 但无法获得预期的结果。

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

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

4

1 回答 1

2

使用元素 day-of-year 格式化或解析时刻/实例对类没有特殊问题,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

请记住,任何将 -objects转换Moment例如java.time.Instantjava.util.Date将丢失闰秒信息。

另一点:不能直接访问类中的 day-of-year-element,Moment因为 day-of-year 是一个本地元素,与没有区域偏移的通用时间无关,但如果您还指定了一个区域偏移量或时区。例子:

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

关于最后一个例子:当然,它只能在 local type 的上下文中工作,Moment但不能在 local type 的上下文中工作PlainTimeMoment在处理类、以编程方式以及格式化和解析时,闰秒支持深深嵌入到 Time4J 的各个层面。

于 2017-05-26T18:47:35.117 回答