我有一个来自源代码的Instant
,根据规范,它应该是LocalDate
,但在LocalDate
类中没有看到任何方法将Instant
转换为LocalDate
。
最好的方法是什么?
如果使用java 8,您可以执行以下操作
Instant instantOfNow = Instant.now();
LocalDate localDate
= LocalDateTime.ofInstant(instantOfNow, ZoneOffset.UTC).toLocalDate();
其他答案提供了转换的机制,但我想添加一些关于这种转换含义的背景知识,希望有助于解释为什么它会以这种方式工作。
LocalDate
和Instant
似乎相似–它们都保存日期(/时间)信息,而不包含时区信息。然而,它们有着完全不同的含义。
Instant
明确表示一个时间点。该表示不明确包含任何时区,但隐含地引用UTC时间线。
LocalDateTime
(和LocalDate
)是不明确的,因为它表示本地时间线中的一个点,它隐含地引用了本地时区。
因此,为了正确地将Instant
转换为LocalDateTime
(概念上-其中一些步骤在实现中捆绑在一起到一个操作中),您需要:
1.通过应用UTC时区信息
将Instant
转换为ZonedDateTime
2.将时区从UTC更改为本地时区(这意味着应用相关的时区偏移量),这为您提供另一个ZonedDateTime
(具有不同的时区)
3.将ZonedDateTime
转换为LocalDateTime
,通过删除时区信息使时区隐式(本地).
最后,您可以删除LocalDateTime的时间部分,并以LocalDate结束。
<代码>本地日期。临时(…) 到达Java 9。
Instant instant = Instant.parse("2020-01-23T00:00:00Z");
ZoneId zone = ZoneId.of("America/Edmonton");
LocalDate date = LocalDate.ofInstant(instant, zone);
请参阅在IdeO上实时运行的代码ne.com.
请注意,日期是22日,而不是23日,因为该时区使用UTC前几个小时的偏移量。
2020-01-22
如果您使用的是Java8,那么您可以使用ZonedDateTime
的toLocalDate()
方法:
yourInstant.atZone(yourZoneId).toLocalDate()
我使用Java 8的新DateTime API。 如何将LocalDate转换为Instant?我有个例外 我不明白为什么。
我试图创建一个即时从日期和时间字符串的实例。Date的格式如下。因此,这些值可以如下所示:
问题内容: 即 此代码 给我 : 2012-16-02 05:16:17 什么时候 返回: 2012-01-02 05:16:17.0 问题答案: 您应该改用日历:
问题内容: 我想在Golang中将int转换为hex。在strconv中,有一种将字符串转换为十六进制的方法。是否有类似的方法从int获取十六进制字符串? 问题答案: 由于hex是Integer文字,因此您可以使用,和或格式向fmt包询问该整数的字符串表示形式。参观游乐场 输出:
问题内容: 我正在一个项目中,所有从到的转换都是这样完成的: 我对Java不熟悉。我想这是通常的做法还是出了什么问题? 问题答案: 正常的方法是或。 串联可以工作,但是这是非常规的,可能会产生难闻的气味,因为这表明作者不了解上述两种方法(他们可能还不知道什么?)。 当与字符串一起使用时,Java对+运算符有特殊的支持(请参阅文档),它将你发布的代码转换为: 在编译时。它的效率稍低(最终会调用,这反
问题内容: 简单,非常简单,但Google叔叔和我似乎感到困惑。 我有已经拥有自己的单曲。 如何将获得的从转换为? 有没有解决的办法:我试图像这样多次 铸造 。 ..但是失败了。 问题答案: 要放大@Andrew Thompson的答案,请注意,实现该接口的对象知道如何绘画,但是可能尚未要求这样做。相反,BufferedImage具有“图像数据的可访问缓冲区”,程序必须通过调用该方法来呈现该缓冲区