【问题标题】:SimpleDateFormat parse always returns EDT dateSimpleDateFormat 解析总是返回 EDT 日期
【发布时间】:2015-05-27 02:17:28
【问题描述】:

我有一个问题。我已经浏览了所有相关的帖子,但无法摆脱这种情况。我正在尝试将美国/太平洋日期从字符串转换为日期对象:

SimpleDateFormat df = new SimpleDateFormat("dd-MM-yy HH:mm:SS a z");
df.setTimeZone(TimeZoneUtil.getTimeZone("US/Pacific"));
String userTime = df.format(date);// User Time - Returns correct US/Pacific time
Date userDate =  df.parse(userTime); // Always returns the date in EDT

我知道 Date 没有自己的格式,但我完全不知道 parse 方法返回 EDT 时间。

我的问题是我想将 userTime 字符串转换为与我设置为 SimpleDateFormat 相同的格式/时区的 Date 对象。我需要帮助,伙计们……绝望地等待着。提前致谢

【问题讨论】:

  • 我知道 Date 没有自己的格式 它也没有自己的时区。时区是格式的一部分。
  • 您的SimpleDateFormat 实例正在使用带有z 的模式,这是一个通用时区[1]。您尝试解析的字符串是什么?是在美国东部时间吗? docs.oracle.com/javase/8/docs/api/java/text/…
  • 嗨 Brett - 23-03-15 21:28:232 PM PDT 我想解析和创建日期。我只想创建一个具有此值的日期对象。请注意,用户可以选择具有任何时区的任何日期,因此它不是恒定的。 :)

标签: java parsing date timezone simpledateformat


【解决方案1】:

java.util.Date 对象不在时区中。调用 toString 时,构建的字符串会在 jvm 的本地时区。

如果您想在不同的时区构建一个字符串,您需要构建一个新的 SimpleDateFormat,或者在格式化之前再次设置时区。

【讨论】:

  • 感谢您的回复 - “太平洋夏令时间 23-03-15 21:28:232 PM”我想解析和创建日期。我只想创建一个具有此值的日期对象。请注意,用户可以选择具有任何时区的任何日期,因此它不是恒定的。 :) –
  • 您使用的日期格式似乎是正确的。它提供了什么价值?
【解决方案2】:

看着documentation:

解析
[...]TimeZone 值可能会被覆盖,具体取决于给定模式和文本中的时区值。之前通过调用 setTimeZone 设置的任何 TimeZone 值可能需要恢复以进行进一步操作。

希望对你有帮助

【讨论】:

  • llGala - 感谢您的回复。我没有看到任何覆盖时区的代码。我要解析的日期是这样的 - 23-03-15 21:28:232 PM PDT。所以我只想从中创建一个日期。请注意,时区和日期由用户在运行时提供。所以它不可能是恒定的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
  • 1970-01-01
  • 2020-06-18
  • 2013-03-29
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多