【问题标题】:Extract time zone from jodatime DateTime从 jodatime DateTime 中提取时区
【发布时间】:2018-06-06 16:54:52
【问题描述】:

我收到一个包含 ISO8601 日期时间的日期时间字符串,例如 "2001-07-04T12:08:56.235-07:00",然后以这种方式 new DateTime("2001-07-04T12:08:56.235-07:00") 将此字符串解析为 jodatime 日期时间对象,然后使用变量格式化程序模式再次将其转换为字符串通过参数传递,但发生这种情况时,不使用时区,因此使用系统的默认时区。我想要的是从第一个给定日期提取时区(或偏移量),并使用它来相应地打印它。有可能吗?

先谢谢了!

【问题讨论】:

  • 你能展示这个重新转换为字符串的代码吗?因为您提出的建议看起来像是一种解决方法,而且我很确定存在真正的解决方案。

标签: java datetime jodatime


【解决方案1】:

不要使用new DateTime("...")。使用DateTime.parse("...")

查看区别:

DateTime dateTime1 = new DateTime("2001-07-04T12:08:56.235-07:00");
System.out.println(dateTime1);
System.out.println(dateTime1.getZone());

DateTime dateTime2 = DateTime.parse("2001-07-04T12:08:56.235-07:00");
System.out.println(dateTime2);
System.out.println(dateTime2.getZone());

输出(我在美国东部)

2001-07-04T15:08:56.235-04:00
America/New_York
2001-07-04T12:08:56.235-07:00
-07:00

如您所见,使用new 转换为默认时区,而使用parse 保留给定时区。

【讨论】:

  • 非常感谢您的回复!它实际上很好用。我看到的唯一一点是它将时区信息从 ID 转换为偏移量,因此,当我使用 z 模式打印时区时,我得到它的数字表示 (-07:00) 而不是它的名称(EDT 或东部夏令时间)。你知道有什么方法可以取而代之吗?
  • @beni0888 有多个时区偏移 -07:00。如果您希望按名称显示区域,则必须提供该名称。
猜你喜欢
  • 2012-03-12
  • 2010-10-09
  • 2023-03-16
  • 2014-07-07
  • 2021-04-19
  • 2015-06-12
  • 2010-11-20
  • 1970-01-01
  • 2012-06-11
相关资源
最近更新 更多