【问题标题】:Java date string parse creates difference of timezoneJava日期字符串解析创建时区差异
【发布时间】:2015-02-19 10:28:54
【问题描述】:

我对此感到有些沮丧。

我有一个字符串 "2015-02-18T23:44:59",它表示 GMT 格式的时间。

我想将此日期解析为日期对象。

String dateStr = "2015-02-18T23:44:59";
Date date = DateUtils.parseDate(dateStr, new String[]{"yyyy-MM-dd'T'HH:mm:ss"});
System.out.println(dateStr + " \t" + date.toString());

这个输出:

2015-02-18T23:44:59     Thu Feb 19 05:14:59 IST 2015

如您所见,后一个时间有时区 IST,但我原来的时间是 GMT。 我认为没有任何解析函数采用当前日期的时区。

回答这个问题的一种方法是:

date.setTime(date.getTime() + ( date.getTimezoneOffset()  * 60 * 1000));
System.out.println("\t"  + date.toString());

这个输出:

Wed Feb 18 23:44:59 IST 2015

这似乎是正确的时间(但不正确的时区)。此外,getTimezoneOffset() 已弃用。

任何人都可以建议我考虑时区来处理字符串日期的更好方法。

【问题讨论】:

  • 您只是打印java.util.DatetoString(),它仅表示与基准时间的毫秒偏移量。 Date 不知道特定的时区,因此 Date.toString() 总是使用本地时区进行转换。
  • 感谢@IanRoberts 您的意见。我很清楚这个事实。我会为你详细解释一下。字符串日期在 UTC 时区。将该时间转换为日期后,应在时区中进行适当的更改。所以正确的输出是Thu Feb 19 05:14:59 IST 2015。你可以看到这是正确的输出。虽然这里的时区是 IST,但时间会相应调整。这就是我想要的。

标签: java parsing date datetime


【解决方案1】:

我会使用日期格式:

SimpleDateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
utcFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = utcFormat.parse("2015-02-18T23:44:59");

【讨论】:

    猜你喜欢
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 2013-06-05
    相关资源
    最近更新 更多