【问题标题】:Change the offset alone in a JodaDate without changing the date and time information在 JodaDate 中单独更改偏移量而不更改日期和时间信息
【发布时间】:2012-06-12 12:52:31
【问题描述】:

我得到一个像“2012-07-01T06:00 +02:00”这样的字符串作为输入。它在 CET 中。 但是这个字符串应该是“2012-07-01T06:00 +01:00”。

我们无法更改原始来源的任何内容。

现在我想将该日期作为我的系统预期的“2012-07-01T06:00 +01:00”。

我正在使用 Joda 库。 我阅读了将 DateTimeZone 指定为德国的日期。

在此日期,一旦我将 Europe/London 指定为 DateTimeZone,日期将变为 “2012-07-01T05:00 +01:00”(这不是我的系统的预期值,请参阅小时变化)。

有没有办法不使用字符串操作?

【问题讨论】:

  • 字符串来自哪里 - 从你的 2 个例子中 - 服务器可能有错误的时间
  • 字符串的来源也在做字符串操作,他们设置错了。不幸的是,这不能立即解决,因为在接触它之前必须对副作用进行研究。它是一个通用模块。
  • 这正是它应该做的,与 gmt 相比,cet 是 +1。如果您不信任它,为什么还要费心从您的来源获取时间?
  • Joda 正在按预期工作。我对此毫无疑问。我只是想至少检查一下我是否可以在我的应用程序中以正确的方式做到这一点(而不是添加一层丑陋的字符串操作)
  • “我是否能以正确的方式做到这一点”您到底想做什么...将 DateTime 的时间和日期更改为其他内容?

标签: java datetime date jodatime datetimeoffset


【解决方案1】:

所以,您已经损坏了输入,解析它的唯一方法是使用字符串操作函数修复它,然后使用具有指定时间偏移的日期解析器。

如果您知道字符串包含 +01:00 偏移量中的时间,则应使用 substring() 从字符串中删除偏移量,并使用明确指定 withZone(DateTimeZone.forOffsetHours(1)) 的 DateTimeFormat 完全忽略输入的偏移量。

但前提是你 100% 确定问题出在输入字符串中。

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多