格式化time4j时刻
Formatting time4j moment
对于其中一个项目,另一个系统给了我一毫秒的时间。
我需要转换为“yyyy-DDDT:HH:mm:ssZ”
诀窍是以闰秒显示它。
由于Java库没有闰秒,我决定使用Time4J的Momentclass.
但是 Moment 的 toString()
正在打印 yyyy-MM-ddTHH:mm:ss
。
是否可以在 Moment class 中获取 一年中的第几天 ?
是否有创建自定义格式化程序的示例。我尝试了一些,包括 ChronoFormatter
。但得不到想要的结果。
一个糟糕的解决方法是对 Date 部分使用 Calendar
,对 time 部分使用 Moment
。
但是很繁琐,从String解析回来会很困难。
格式化或解析 moments/instants 元素 day-of-year 对于 class 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
请记住,Moment
中的任何 conversion 对象,例如 java.time.Instant
或 java.util.Date
都会丢失闰秒信息。
另一点:无法直接访问 class 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
的上下文。在以编程方式处理 class Moment
、格式化和解析时,闰秒支持在 Time4J 的各个层面上都深深嵌入。
对于其中一个项目,另一个系统给了我一毫秒的时间。 我需要转换为“yyyy-DDDT:HH:mm:ssZ”
诀窍是以闰秒显示它。
由于Java库没有闰秒,我决定使用Time4J的Momentclass.
但是 Moment 的 toString()
正在打印 yyyy-MM-ddTHH:mm:ss
。
是否可以在 Moment class 中获取 一年中的第几天 ?
是否有创建自定义格式化程序的示例。我尝试了一些,包括 ChronoFormatter
。但得不到想要的结果。
一个糟糕的解决方法是对 Date 部分使用 Calendar
,对 time 部分使用 Moment
。
但是很繁琐,从String解析回来会很困难。
格式化或解析 moments/instants 元素 day-of-year 对于 class 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
请记住,Moment
中的任何 conversion 对象,例如 java.time.Instant
或 java.util.Date
都会丢失闰秒信息。
另一点:无法直接访问 class 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
的上下文。在以编程方式处理 class Moment
、格式化和解析时,闰秒支持在 Time4J 的各个层面上都深深嵌入。