Instant to String java.time

时间:2017-09-19 02:29:55

标签: java-8 datetime-format java-time

使用System.currentTimeMillis()是否可以轻松实现2017-04-13T19:00:00+08:00java.time

到目前为止,我已经尝试了大量的方法,但它要么提供正确的区域,要么使用错误的语言,或者根本不提供任何区域。

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时间API来看它的美丽,但我确实觉得它是用脚画蛇#34;

例如,withZone听起来像是将时间结果转移到容纳区域。但它实际上也改变了语言,我认为这应该只与Locale有关。

3 个答案:

答案 0 :(得分:3)

我建议绕过System.currentTimeMillis()然后直接跳到java.time的土地:

System.out.println(OffsetDateTime.now());

对我来说,打印:2017-09-19T06:07:12.814+01:00

答案 1 :(得分:3)

$count = 10; $it = null; $redis->setOption(\Redis::OPT_SCAN, \Redis::SCAN_RETRY); $pattern = '*"regionId":"564"*'; $result = $redis->zScan('my_key', $it, $pattern, $count); 之类的方法返回的long表示自纪元以来的毫秒描述了时间线上的System.currentTimeMillis()(瞬时点),并且可以使用{{转换为对象表示形式1}}

Instant
Instant.ofEpochMilli(…)

要将其转换为带偏移的日期时间,您可以使用long l = System.currentTimeMillis(); System.out.println(Instant.ofEpochMilli(l));

2017-09-19T08:17:37.054Z
OffsetDateTime.ofInstant(…)

请注意,此处不需要格式化程序。

答案 2 :(得分:1)

我终于得到了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(...)抱怨当年...