使用System.currentTimeMillis()
是否可以轻松实现2017-04-13T19:00:00+08:00
到java.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
有关。
答案 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(...)
抱怨当年...