当前位置: 首页 > 知识库问答 >
问题:

如何从Instant转换为LocalDate

缪阎宝
2023-03-14

我有一个来自源代码Instant,根据规范,它应该是LocalDate,但在LocalDate类中没有看到任何方法将Instant转换为LocalDate

最好的方法是什么?

共有3个答案

蒋奕
2023-03-14

如果使用java 8,您可以执行以下操作

Instant instantOfNow = Instant.now();
LocalDate localDate 
    = LocalDateTime.ofInstant(instantOfNow, ZoneOffset.UTC).toLocalDate();
屈星腾
2023-03-14

其他答案提供了转换的机制,但我想添加一些关于这种转换含义的背景知识,希望有助于解释为什么它会以这种方式工作。

LocalDateInstant似乎相似–它们都保存日期(/时间)信息,而不包含时区信息。然而,它们有着完全不同的含义。

Instant明确表示一个时间点。该表示不明确包含任何时区,但隐含地引用UTC时间线。

LocalDateTime(和LocalDate)是不明确的,因为它表示本地时间线中的一个点,它隐含地引用了本地时区。

因此,为了正确地将Instant转换为LocalDateTime(概念上-其中一些步骤在实现中捆绑在一起到一个操作中),您需要:
1.通过应用UTC时区信息
Instant转换为ZonedDateTime2.将时区从UTC更改为本地时区(这意味着应用相关的时区偏移量),这为您提供另一个ZonedDateTime(具有不同的时区)
3.将ZonedDateTime转换为LocalDateTime,通过删除时区信息使时区隐式(本地).

最后,您可以删除LocalDateTime的时间部分,并以LocalDate结束。

孔睿
2023-03-14

<代码>本地日期。临时(…) 到达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,那么您可以使用ZonedDateTimetoLocalDate()方法:

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具有“图像数据的可访问缓冲区”,程序必须通过调用该方法来呈现该缓冲区