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