java - 格式化time4j时刻

标签 java leap-second time4j

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

诀窍是以闰秒显示它。

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

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

是否有可能在 Moment 类中获取一年中的某天

是否有创建自定义格式化程序的示例。我尝试了一些,包括 ChronoFormatter。但得不到想要的结果。

一个糟糕的解决方法是使用 Calendar 作为 Date 部分,使用 Moment 作为 time 部分。

但是很繁琐,从String解析回来会很困难。

最佳答案

用元素 day-of-year 格式化或解析时刻/时刻对于 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

请记住,任何 conversion Moment - 例如 java.time.Instantjava.util.Date 的对象将丢失闰秒信息。

另一点:无法直接访问 Moment 类中的 day-of-year-element,因为 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

关于最后一个例子:当然,它只适用于 Moment 的上下文,但不适用于本地类型 PlainTime 的上下文。在处理 Moment 类时,以编程方式以及格式化和解析方式,闰秒支持在所有级别上都深深地嵌入到 Time4J 中。

关于java - 格式化time4j时刻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44205662/

相关文章:

c++ - 闰秒和 std::chrono

JAVA TLS 1.2 降级到 TLS 1.0 有时会报错

java - 在大学完成计算机科学专业的第一年…夏天该做什么?

java - 在将 XML 解码为对象时,EclipseLink MOXy 是否能够应用 JSR-303 Bean 验证?

javafx open window no effect.application launch with then throw class not found

java - Java中将time4j转换的中文日期格式化为公历

java - 所选方面不应使用 hibernate 搜索过滤自己的组

java - 用闰秒解析 LocalTime

java - 如何获取当前TAI时间?