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

如何将java.sql.timestamp转换为LocalDate(java8)java.time?

公冶翰池
2023-03-14

在Java8中,如何将Timestamp(在java.sql中)转换为LocalDate(在java.time中)?

共有3个答案

索曾琪
2023-03-14

我将稍微扩展@assylias answer以考虑时区。至少有两种方法可以获取特定时区的LocalDateTime。

您可以为整个应用程序使用setDefault时区。应该在任何时间戳之前调用它-

public static void main(String... args) {
    TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
    TimeZone.setDefault(utcTimeZone);
    ...
    timestamp.toLocalDateTime().toLocalDate();
}

或者你可以使用toInstant。atZone链:

timestamp.toInstant()
        .atZone(ZoneId.of("UTC"))
        .toLocalDate();
宗乐池
2023-03-14

被接受的答案并不理想,所以我决定加上2美分

timeStamp.toLocalDateTime().toLocalDate();

总的来说,这是一个糟糕的解决方案,我甚至不确定他们为什么要把这个方法添加到JDK中,因为它通过使用系统时区进行隐式转换而使事情变得非常混乱。通常,当只使用java8日期类时,程序员被迫指定一个时区,这是一件好事。

好的解决办法是

timestamp.toInstant().atZone(zoneId).toLocalDate()

其中zoneId是要使用的时区,如果要使用系统时区,通常是ZoneId.systemDefault(),或者是一些硬编码的时区,如ZoneOffset。UTC

一般的做法应该是

  1. 使用一个直接相关的类(例如,在我们的例子中是java),可以自由地使用新的java8日期类。时间Instant与java直接相关。sql。时间戳,即它们之间不需要时区转换
娄鹤轩
2023-03-14

你可以做到:

timeStamp.toLocalDateTime().toLocalDate();

请注意,时间戳。toLocalDateTime()将使用时钟。systemDefaultZone()进行转换的时区。这可能不是你想要的。

 类似资料:
  • 问题内容: 我正在使用JodaTime 1.6.2。 我有一个需要转换为(Joda)或进行映射的a。 原因是我想出了如何在a 和a 之间进行转换: 因此,如果我可以在和之间进行转换,则可以继续转换为。感谢您朝着正确的方向前进! 问题答案: 乔达时间 要将JodaTime转换为,只需执行 要将JodaTime转换为,只需执行 Java时间 要将Java8转换为,只需执行 要将Java8转换为,只需执

  • 我是java.time包的新手。我有一个本地日期是2015-12-10。我需要将此转换为ZonedDateTime。时间应该是00:00:00,区域是zoneoffset.utc。 dateTimeException:无法从java.time.localDate类型的TemporalAccessor:2015-12-10获取Instant 我也试过: 这会产生意想不到的结果。 我查看了API并尝试

  • 我想把这个(字符串)s1转换成模式的LocalDate(LocalDate-dd/mm/yyy) 输出-25/07/1992应该是LocalDate类型,而不是字符串

  • 我使用Java 8的新DateTime API。 如何将LocalDate转换为Instant?我有个例外 我不明白为什么。

  • 有没有一种方法可以将转换为? 我有以下代码: 但是时间戳构造函数似乎不支持该变量类型。

  • 问题内容: 将JodaTime转换为对象的最简单方法是什么? 问题答案: 乔达时间 要将JodaTime转换为,请执行 要将JodaTime转换为,请执行 Java时间 要将Java8转换为,请执行 要将Java8转换为,请执行 您可能会想用来缩短它,但是没有直接的API可以获取系统默认的区域偏移量。 要将Java8转换为,请执行