有没有一种使用java.time实现System.currentTimeMillis()到2017-04-13T19:00:00+08:00的简单方法
到目前为止,我已经尝试了大量的方法,但它们要么以错误的语言给出了正确的区域,要么根本没有给出任何区域。
Instant shanghai= Instant.ofEpochMilli(System.currentTimeMillis());
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL)
.withZone(ZoneId.of("Asia/Shanghai"));
System.out.println(formatter.format(shanghai));顺便说一句,也许是因为我使用Java 8 time API的次数还不够多,看不到它的美妙之处,但我确实觉得它是“用脚画蛇”。
例如,withZone听起来像是改变了时间结果以适应区域。但它实际上也改变了语言,我认为这应该只与Locale有关。
发布于 2017-09-19 13:08:18
我将建议绕过System.currentTimeMillis(),直接跳到java.time的领域
System.out.println(OffsetDateTime.now());对于我的照片:2017-09-19T06:07:12.814+01:00
发布于 2017-09-19 16:18:39
由System.currentTimeMillis()等方法返回的long,表示自纪元描述时间线上的Instant (瞬时点)以来的毫秒数,并可使用Instant.ofEpochMilli(…)转换为对象表示
long l = System.currentTimeMillis();
System.out.println(Instant.ofEpochMilli(l));2017-09-19T08:17:37.054Z要将其转换为带偏移量的datetime,可以使用OffsetDateTime.ofInstant(…)
System.out.println(
OffsetDateTime.ofInstant(Instant.ofEpochMilli(l), ZoneId.of("Asia/Shanghai")));2017-09-19T16:17:37.054+08:00请注意,这里不需要格式化程序。
发布于 2017-09-19 11:29:41
我终于得到了ISO8601的时间!
Instant shanghai = Instant.ofEpochMilli(System.currentTimeMillis());
OffsetDateTime o = OffsetDateTime.ofInstant(shanghai,ZoneId.systemDefault());
DateTimeFormatter dtf = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
System.out.println(dtf.format(o));在DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(Instant.now())抱怨偏移量有问题之后,在DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(...)抱怨年份之后...
https://stackoverflow.com/questions/46290899
复制相似问题