【问题标题】:Joda-time to date with timezone in javaJoda-time to date with timezone in java
【发布时间】: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 应该被修改为手动包含偏移量。它总是代表一个瞬间。只需创建一个带有DateDateTime,然后从它那里得到一个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


【解决方案1】:

这样试试

      DateTime dateTimeUtc = new DateTime( new Date(), DateTimeZone.forID("Etc/GMT+11"));
      System.out.println(dateTimeUtc);
      System.out.println(dateTimeUtc.toDate());

输出:
2014-07-01T05:45:51.791-11:00
2014 年 7 月 1 日星期二 22:15:51 IST

您可以从TimeZone.getAvailableIDs();获取可用的时区ID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2016-10-25
    • 2022-08-27
    • 2020-07-08
    • 1970-01-01
    • 2013-09-18
    相关资源
    最近更新 更多