【发布时间】:2014-08-22 05:09:05
【问题描述】:
有一个日期,我可以建立一个约达的日期时间:
DateTime dateTimeUtc = new DateTime( date, timeZone_MADRID )
当我尝试使用以下方法检索日期时:
dateTimeUtc.toDate()
它会丢失时区值,因为 java.util.Date 不知道 TimeZones。但我需要一个过程来根据 TimeZone 修改 Date 值。
就是这样:如果马德里的时区是 +2 并且我的对象 Date 的值为 2000 年 1 月 1 日 12:00,则 Date 的“处理”值之后将为 1/1/2000 14:00
获得它的正确方法是什么?
【问题讨论】:
-
确实不清楚您的意思,但是
Date应该不被修改为手动包含偏移量。它总是代表一个瞬间。只需创建一个带有Date的DateTime,然后从它那里得到一个Date,应该会给你一个等于第一个的Date。如果你期待别的,你误解了Date。 -
对不起,如果我没有解释清楚。事实上,我有一个非常大的项目,它使用了很多 new Date()。而且这个项目必须国际化,所以为了做到这一点,我必须创建一个“拦截器”,它可以让所有新的 Dates() 在存储到 BD 之前和检索 BD 之后更改时区。所以不是关于将日期更改为 JodaTime 的问题。我希望它有所帮助。
-
java.util.Date没有“更改时区”这样的概念。现在就是现在,无论时区如何,都将由相同的Date对象表示。听起来您正试图走捷径以避免正确地做事。别。咬紧牙关,适当地修复您的系统。 从长远来看,其他任何事情都会导致问题,并且真的很难解决。 -
@ilopezluna 你应该听 Jon Skeet 的。破坏 java.util.Date 的使用只会给你带来困惑、痛苦和眼泪。一般来说,尽可能避免使用 j.u.Date。最好使用 Joda-Time 对象(或 java.time)。如果不能,则以 [ISO 8601] 格式序列化为 s 字符串表示形式。 Joda-Time 默认生成这样的字符串。
-
引用:“根据时区修改日期值”。不,您不能将固定的
Date-reference 修改为 UTC。但是您可以保留一个额外的时区对象,然后在您的过程中将其与Date-object 一起使用(但正如 Jon Skeet 正确所说:不要使用任何类型的偏移或区域破坏Date-object)。并且:“Date has a value of 1/1/2000 12:00”,不,Date没有这个值,只是一个长原语,表示自 UTC 区域中的 UNIX 纪元以来经过的毫秒数。
标签: java date timezone jodatime dst