Java日期字符串解析创建时区差异

Java日期字符串解析创建时区差异,java,parsing,date,datetime,Java,Parsing,Date,Datetime,我对此感到有点沮丧 我有一个字符串“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()); 这将产生: 20

我对此感到有点沮丧

我有一个字符串
“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,但我最初的时间是格林尼治标准时间。 我不认为有任何解析函数可以获取当前日期的时区

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

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

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