如何将给定时区的 Java 日期转换为即时?[已结束]

How do I convert a Java Date into an Instant for a given timezone? [closed]

提问人:kcon123 提问时间:5/25/2023 最后编辑:Anonymouskcon123 更新时间:5/25/2023 访问量:2080

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

5个月前关闭。

我有一个 Date 类的实例和一个时区(例如欧洲/伦敦)。如何将其转换为即时?以下是正确的方法吗?

LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.of(timeZone));
Instant instant = zonedDateTime.toInstant();
java java-time time-offset , java.util.date, java.time.instant

评论

5赞 user16320675 5/25/2023
什么是“UTC Instant”?An 是“时间轴上的瞬时点”,它没有时区信息。(怎么样?InstantInstant instant = date.toInstant()
2赞 deHaar 5/25/2023
你不需要 ,在那里你可以放 和 。但是,如果您只想要一个 ,只需打印 .LocalDateTimeZonedDateTime.ofInstant(Instant, ZoneId)date.toInstant()ZoneOffset.UTCStringInstant
2赞 deHaar 5/25/2023
Date.toInstant()...就是这样。这是直截了当的,因为 a 只不过是表示纪元毫的值的包装器,纪元也是 的基数。java.util.DateInstant
1赞 user16320675 5/25/2023
顺便说一句,该代码不应该编译、假设或子类(“我有一个 Date 类的实例”),因为需要(回答“下面是正确的方法吗?顺便说一句,检查文档以查找所有可用方法)java.util.DateLocalDateTime.ofInstant()Instant
1赞 Basil Bourque 5/25/2023
你说的是哪个班级?Date

答:

4赞 Basil Bourque 5/25/2023 #1

TL的;博士

myJavaUtilDate.toInstant()

不需要 , , 类。LocalDateTimeZoneIdZonedDateTime

你说:

我有一个 Date 类的实例

java.util.Date myJavaUtilDate = … ;

这个类现在是遗留的,几年前被 JSR 310 中定义的现代 java.time 类所取代。具体替换为 ,表示时间轴上的某个时刻、特定点,如 UTC 时间子午线的偏移量为 0 小时-分钟-秒。java.time.Instant

和时区(例如欧洲/伦敦)

ZoneId z = ZoneId.of( "Europe/London" ) ;

如何将其转换为即时?

无需时区。如上所述,两者都表示在 UTC 中看到的时刻。java.util.Datejava.time.Instant

新的👉转换方法被添加到类中。查找 & 的命名约定。您可以在旧类和新式类之间来回转换。坚持现代课程。仅使用旧版日期时间类与尚未更新到 java.time 的旧代码进行互操作。to…from…

java.time.Instant instant = myJavaUtilDate.toInstant() ;

而另一个方向:

java.util.Date d = java.util.Date.from( instant ) ;

谨防另一个方向的数据丢失。An 的分辨率为纳秒,而分辨率为毫秒。Instantjava.util.Date