Kan*_*mar 6 java timezone date simpledateformat
我按照以下代码在指定的dateTime上使用指定的Timezone创建Date对象.
注意:我没有为jvm设置任何时区; 但是使用不同的Linux服务器时区测试此代码.
String date = "20121225 10:00:00";
String timeZoneId = "Asia/Calcutta";
TimeZone timeZone = TimeZone.getTimeZone(timeZoneId);
DateFormat dateFormatLocal = new SimpleDateFormat("yyyyMMdd HH:mm:ss z");
//This date object is given time and given timezone
java.util.Date parsedDate = dateFormatLocal.parse(date + " "
+ timeZone.getDisplayName(false, TimeZone.SHORT));
if (timeZone.inDaylightTime(parsedDate)) {
// We need to re-parse because we don't know if the date
// is DST until it is parsed...
parsedDate = dateFormatLocal.parse(date + " "
+ timeZone.getDisplayName(true, TimeZone.SHORT));
}
Run Code Online (Sandbox Code Playgroud)
现在parsedDate对象的行为不同
当我的jvm服务器在IST中运行时
parsedDate.getTime() - 1356409800000
parsedDate.toString() - Tue Dec 25 10:00:00 IST 2012
in GMT --- 12/25/2012 04: 30:00 GMT
当我的jvm服务器在EST运行时
parsedDate.getTime() - 1356422400000
parsedDate.toString() - Tue Dec 25 03:00:00 EST 2012
in GMT --- 12/25/2012 08:00 :00 GMT
我的两个系统时间是同步的
星期一12月24日10:30:04 EST 2012年
12月24日21:00:48 IST 2012
我期待在这两台机器上我应该得到相同的GMT时间.
这里有什么问题?
短名称不是识别时区的好方法,因为它不是唯一的;Javadocjava.util.TimeZone给出了“‘CST’可以是美国‘中部标准时间’和‘中国标准时间’”的示例。
更普遍 。。。与其将时区作为字符串传递,以便您必须解析它,不如通过使用您已有的实例告诉您时区是什么DateFormat更有意义:DateFormatTimeZone
DateFormat dateFormatLocal = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
dateFormatLocal.setTimeZone(timeZone);
java.util.Date parsedDate = dateFormatLocal.parse(date);
Run Code Online (Sandbox Code Playgroud)
(这也将在可能的情况下自动处理夏令时。)