使用带时区的SimpleDateTimeFormatter时获取不正确的解析日期

我有以下代码:

SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); String s2 = "Mon Oct 19 19:52:21 IST 2015"; System.out.println(format.parse(s2)); 

我预计该代码将打印出“2015年10月19日07:22:21 PDT 2015”,但令我惊讶的是它印有“Mon Oct 19 10:52:21 PDT 2015”。 我可以看到“IST”是“z”的有效时区。 但是,以下代码工作正常:

 SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); String s2 = "Mon Oct 19 19:52:21 GMT+05:30 2015"; System.out.println(format.parse(s2)); 

请帮忙。

使用IST是危险的,因为它可以代表印度或以色列ST。 假设你的意思是印度ST,试试这个:

  SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); format.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta")); String s2 = "Mon Oct 19 19:52:21 IST 2015"; System.out.println(format.parse(s2)); 

另外,请按照@Meno的回答提出建议

代码表达式

 System.out.println(format.parse(s2)); 

始终在您的系统时区中打印您的即时/时刻(类型为java.util.Date的对象),显然是PDT。 您隐式在java.util.Date上应用方法toString() 。 使用像SimpleDateFormat这样的专用格式化程序,并在此格式化程序上设置时区以实现所需的结果。

最后,您需要两个格式化程序,一个用于解析,另一个用于打印。