将字符串转换为毫秒
我想计算两个日期之间的时间差(格式为“yyyyMMddHHmmss”)。 基本思想是首先将字符串日期转换为毫秒,然后获取时间差。
Calendar c1 = Calendar.getInstance();
c1.setTime(new SimpleDateFormat("yyyyMMddHHmmss").parse("20110327032913"));
System.out.println(c1.getTimeInMillis());
Calendar c2 = Calendar.getInstance();
c2.setTime(new SimpleDateFormat("yyyyMMddHHmmss").parse("20110327025913"));
System.out.println(c2.getTimeInMillis());
结果:
1301189353000
1301191153000
显然,第一个日期晚于第二个日期,但其转换后的毫秒更小。 我有格式错误吗?
两个时间戳之间的时间差为30分钟:
1301191153000 - 1301189353000 = 1800000ms = 30 min
由于3月27日的DST变化,时钟从凌晨2点到凌晨3点设置在凌晨2点,因此时间戳:
20110327032913 => 2011-03-27 03:29:13
20110327025913 => 2011-03-27 02:59:13
事实上被解释为:
2011-03-27 03:29:13
2011-03-27 03:59:13 (+1 hour from original time)
因此,第二个时间戳稍后,当转换为ms时,它比第一个更大。
我敢打赌,你在2011年3月27日的夏令时从2点(上午)变为3点(上午)的场所(请参阅此链接)
你第一次是
2011 03 27 03 29 13
yyyy MM dd HH mm ss
而你第二次是
2011 03 27 02 59 13 // does not exist because of time change
yyyy MM dd HH mm ss
所以实际上,你的第二次是:
,,
2011 03 27 03 59 13
yyyy MM dd HH mm ss
这显然比第一次(而不是30分钟前)晚30分钟。
也许这个代码可以帮助你:
Calendar c1 = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
Calendar c2 = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
c1.setTime(sdf.parse("20110327032913"));
System.out.println(c1.getTimeInMillis());
c2.setTime(sdf.parse("20110327025913"));
System.out.println(c2.getTimeInMillis());
System.out.println((c1.getTimeInMillis()-c2.getTimeInMillis())/(1000*60)+ " minutes");
*问题是,如果您的字符串不是UTC,您可能永远不知道是否应用了时间更改,因此间隔可能为一小时。
链接地址: http://www.djcxy.com/p/3059.html