Java 日期字符串解析产生时区差异

Java date string parse creates difference of timezone

对此我有点沮丧。

我有一个字符串 "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() 已弃用。

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

我会使用日期格式:

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");