gpt4 book ai didi

java - 如何将 Instant 设置为特定时间?

转载 作者:行者123 更新时间:2023-12-02 16:17:44 27 4
gpt4 key购买 nike

我一直在尝试按照 stackoverflow 的建议将瞬间设置为特定时间,但我在这样做时遇到了麻烦。我尝试了以下方法:

Instant instant = Instant.atZone(ZoneOffset.UTC)
.withHour(StdIn.readInt())
.withMinute(StdIn.readInt())
.withSecond(0)
.toInstant();

但是我得到了错误:

error: non-static method atZone(ZoneId) cannot be referenced from a static context

顺便说一句,StdIn.readInt() 只是一个从输入中读取数字的库。

假设我想将 Instant 设置为早上 5:10。我该怎么做?

最佳答案

Let's say I want to set an Instant to 5:10am. How do I do that?

我怀疑你想这样做。这在基本意义上是不可能的,因此,公式为:

  • 有一个瞬间,随心所欲。
  • 鉴于瞬间是关于时间的一个时刻,而分钟和天等人类概念不适用于此,您不能将瞬间的“分钟”设置为任何东西。因此,Instants 对此没有用,您必须远离它。转换为某种确实知道一分钟是什么的概念...将其转换为 ZonedDateTime。
  • 拿起 ZDT 并设置您想要的任何细节。
  • 将 ZDT 转换回瞬时。

这是一个很长的歌舞套路,它表明您可能实际上并不“想要”您想要的东西。也许您编写的任何当前使用 Instant 的代码都可以重写为使用更合适的内容,例如 ZonedDateTimeLocalDateTime

但是,如果你必须:

Instant original = Instant.now();
ZonedDateTime zdt = original.atZone(Zone.UTC);
// setting minutes and seconds _AT UTC_? That sounds.. bizarre.
// what in the blazes is your use case??

ZonedDateTime adjusted = zdt
.withHour(hour).withMinute(minute).withSecond(0)
.withNano(0) // you forgot about the nanos!
;

Instant out = adjusted.toInstant();

了解 ZDT 和 Instants 之间的区别:

假设您与理发师预约了时间。该约会最好存储为 ZDT:您的约会时间是 2023 年 1 月 9 日,早上 9 点一刻,理发师在阿姆斯特丹,位于 Europe/Amsterdam 区。

就在这一刻和您的约会之间的时间就是它。当您飞往另一个时区时,它不会改变。从这个意义上说,这似乎是一瞬间。但事实并非如此:如果荷兰颁布法令,从今以后荷兰将永远坚持夏令时,不再遵守夏令时,那么在该法律被批准的那一刻,您的约会将立即比现在提前一个小时批准前的那一刻*。

ZonedDateTimes 这样做;他们会随之调整(您必须等待下载新的时区定义,但他们会自动选择并正确报告您预约理发师之前的剩余时间)。

瞬间不会。他们甚至没有时区。他们永远不会那样改变。想想更宇宙。

这就是区别。

*) 但是,rzwitserloot!那太荒谬了!那永远不会发生!啊,但是,你看,it probably would .

关于java - 如何将 Instant 设置为特定时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66217692/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com