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

时间:2014-04-24 08:17:58

标签: java timestamp java-8 localtime java-time

在Java 8中,如何将Timestampjava.sql}转换为LocalDatejava.time)?

3 个答案:

答案 0 :(得分:155)

你可以这样做:

timeStamp.toLocalDateTime().toLocalDate();

答案 1 :(得分:6)

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

您可以对整个应用程序使用setDefault时区。应该在任何时间戳-> java.time转换之前调用它:

 [1] "somecharacters1234"

或者您可以使用toInstant.atZone链:

final Intent intent = new Intent(Intent.ACTION_SEND);
intent.setPackage(ShareConstants.SNAPCHAT_PACKAGE_NAME);
final File file = new File(shareItem.getPath());
final Uri photoURI = FileProvider.getUriForFile(activity.get(),ShareConstants.FILE_PROVIDER, file);
intent.putExtra(Intent.EXTRA_STREAM, photoURI);
intent.setTypeAndNormalize(ShareConstants.MIME_TYPE_IMAGE);
startActivity(intent);

答案 2 :(得分:1)

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

timeStamp.toLocalDateTime().toLocalDate();

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

好的解决方案是

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

zoneId 是您要使用的时区,如果要使用系统时区或某些硬编码时区(如,则通常为 ZoneId.systemDefault()) > ZoneId.of(“ UTC”)

一般方法应该是

  1. 使用直接相关的类(例如)免费使用新的java8日期类。在我们的例子中, java.time.Instant与java.sql.Timestamp 直接相关,即,它们之间不需要时区转换。
  2. 使用此java8类中精心设计的方法来做正确的事情。在我们的案例中, atZone(zoneId)明确表明我们正在进行转换,并为其使用了特定的时区。