我只有一个日期字符串,想要通过它查看其他时区的时间。因此我这样做:
String dateStr = "2014-05-15 16:14:58 PM";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
sdf.setTimeZone(TimeZone.getTimeZone("America/Denver"));
Date date = sdf.parse(dateStr);
System.out.println(date);
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
System.out.println(sdf1.format(date));
这是我电脑当前的时区:
代码运行的结果是:
Fri May 16 06:14:58 CST 2014
2014-05-16 06:14:58 AM
结果是错误的,我在我的电脑上将时区更改为“America/Denver”后,得到了正确的结果,我看到:
America/Denver —— 2014-05-15 02:14:58 AM
我不知道它为什么会这样?
但是,如果我有一个日期而不是日期字符串,我会这样做:
public static String getFormatedDateString(String _timeZone) {
TimeZone timeZone = null;
if (StringUtils.isEmpty(_timeZone)) {
timeZone = TimeZone.getDefault();
} else {
timeZone = TimeZone.getTimeZone(_timeZone);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
sdf.setTimeZone(timeZone);
// TimeZone.setDefault(timeZone);
return sdf.format(new Date());
}
System.out.println("America/Denver -- " + getFormatedDateString("America/Denver"));
结果如下:
------Asia/Shanghai------
2014-05-15 16:32:04 PM (current date)
America/Denver —— 2014-05-15 02:32:04 AM
这个结果是正确的。
所以我很困惑,当我只有一个日期字符串并且想知道其他时区的时间时,我找不到问题。有人能帮帮我吗?