Roc*_* Hu 5 java timezone datetime date
我只有一个日期字符串,我希望通过它在其他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(dateStr);
System.out.println(date);
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
System.out.println(sdf1.format(date));
Run Code Online (Sandbox Code Playgroud)
这是我电脑中的当前TimeZone:
代码运行的结果是:
Fri May 16 06:14:58 CST 2014
2014-05-16 06:14:58 AM
Run Code Online (Sandbox Code Playgroud)
结果是错误的,我通过在计算机中将TimeZone更改为"America/Denver"得到了正确的结果,我看到了:
America/Denver —— 2014-05-15 02:14:58 AM
Run Code Online (Sandbox Code Playgroud)
我不知道为什么喜欢这样?
但如果我有一个日期而不是日期字符串,我这样做:
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());
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
结果是对的.
所以我很困惑,当我只有一个日期字符串并且我想知道其他TimeZone的时间时,我找不到问题.身体可以帮助我吗?
Date
Java中的对象独立于时区的概念.但是,第二点在您的代码中显示为倒退:
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);
Run Code Online (Sandbox Code Playgroud)
这4行的作用是将日期字符串视为"America/Denver"时区中的时间点.
当你将它解析为日期对象时,它会在你自己的时区给你相同的时间.
你反过来想要它:
因此,保持接近您的代码(您可以SimpleDateFormat
有效地使用单个实例,稍后您可以弄清楚),
放下setTimezone
第一个sdf:
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);
Run Code Online (Sandbox Code Playgroud)
将其添加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));
Run Code Online (Sandbox Code Playgroud)
现在,您将日期字符串解析为当前(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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
730 次 |
最近记录: |