使用带时区的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
这样的专用格式化程序,并在此格式化程序上设置时区以实现所需的结果。
最后,您需要两个格式化程序,一个用于解析,另一个用于打印。