【发布时间】:2016-12-11 00:19:11
【问题描述】:
我尝试在特定时区获取当前实例,但它没有按预期工作。关于如何做到这一点的任何想法?
这就是我所做的:
Instant.now(Clock.system(ZoneId.of("America/Los_Angeles"))).truncatedTo(ChronoUnit.SECONDS)
但是,返回的即时时间始终是 UTC。我多次更改了 ZoneID,但总是错误的。请指教。
编辑:
我正在与一个使用时间戳生成日志的应用程序进行交互,我需要对这些事件进行操作。例如,如果我使用特定的时间戳启动我的程序,它应该从那个时间戳开始读取事件。虽然我的笔记本电脑与生成这些事件的应用程序位于同一时区,但当我得到 Instant.Now() 时,我似乎在 UTC。而应用程序根据我们所在的 TimeZone 生成时间戳。我希望我的程序的时钟与服务器中的时钟相同。
应用程序生成格式为 2016-08-04T18:17:51Z 的时间戳
【问题讨论】:
-
在特定时区使用
Instant是没有意义的,因为Instant没有时区的概念,只有自纪元以来的毫秒数。那么你到底想做什么/拥有什么? -
在 Java 8 time api 中, Instant 应该代表时间线上的单个瞬时点。现在,当您尝试将该时间点转换为人类的日期和时间概念时,时区的概念就开始发挥作用了。
-
嗯,我正在与一个应用程序交互,该应用程序返回一些带有时间戳的事件,我需要根据它们的时间戳对这些事件进行操作。
-
Instant.now(clock) 的目的是什么?
-
@MaatDeamon,
Clock提供两件事 - 时区和当前时刻。对于Instant,仅使用当前时刻。 (Clock的两部分本来可以是两个不同的接口,但我们判断分离没有增加足够的价值)
标签: java scala java-8 java-time