Java 按日期字符串获取其他时区的时间,结果错误
我只有一个日期字符串,我想通过它查看其他时区的时间。所以我就这样做了:Java 按日期字符串获取其他时区的时间,结果错误,java,date,datetime,timezone,Java,Date,Datetime,Timezone,我只有一个日期字符串,我想通过它查看其他时区的时间。所以我就这样做了: 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(dateS
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(“美国/丹佛--”+GetFormattedDateString(“美国/丹佛”)
结果如下:
------Asia/Shanghai------
2014-05-15 16:32:04 PM (current date)
America/Denver —— 2014-05-15 02:32:04 AM
这个结果是正确的
所以我很困惑,当我只有一个日期字符串并且我想知道其他时区的时间时,我找不到问题。有人能帮我吗
Date
对象独立于时区的概念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);
这4条线在“美国/丹佛”时区中考虑日期字符串作为时间点。 当您将其解析为date对象时,它将为您提供自己时区中的等效时间
你想让它反过来: 因此,要贴近代码(您只需有效地使用一个SimpleDateFormat
实例,稍后您就可以了解到这一点)
在第一个sdf上放置setTimezone
:
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);
将相同的setTimezone
添加到另一个sdf
:
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
sdf1.setTimeZone(TimeZone.getTimeZone("America/Denver"));
System.out.println(sdf1.format(date));
现在,您正在将日期字符串解析为当前(JVM)时区中的日期。然后将同一日期格式化为不同时区的字符串
更改代码后得到的输出(JVM的时区为IST):
Thu May 15 16:14:58 IST 2014 // Parsed the date string in IST
2014-05-15 04:44:58 AM // Equivalent time in Denver