我有一个String类型的时间戳,我试图将它转换为double(并在几秒钟内找到结果),这就是我所做的:
double mytimeStamp = 0;
String timeStamp = new SimpleDateFormat(" mm ss S").format(new Date( ));
SimpleDateFormat dateFormat = new SimpleDateFormat(" mm ss S");
try {
mytimeStamp = ((double)dateFormat.parse(timeStamp).getTime())/1000;
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("timeStamp is: "+ mytimeStamp);
Run Code Online (Sandbox Code Playgroud)
问题是我获得了一个值-2722.515,我不知道为什么.
它为什么是否定的?
代码有问题吗?
当我将此时间戳转换为mm ss S与实时不匹配时,这似乎是另一个问题!
Duk*_*ing 13
这是一个时区差异问题.
由于您只指定了分钟和秒,因此日期将打开1 Jan 1970 00:mm:ss(mm并且ss是当前时间的分钟和秒).
我将你的例子简化为:
String timeStamp = "00 00 00";
SimpleDateFormat dateFormat = new SimpleDateFormat("HH mm ss");
double hour = dateFormat.parse(timeStamp).getTime()/1000.0/60/60;
System.out.println("hour is: "+ hour);
Run Code Online (Sandbox Code Playgroud)
打印出的小时应该GMT偏离当地时区.
原因是:
SimpleDateFormat是区域设置敏感的,因此dateFormat.parse(timeStamp)将返回Date为给定时区创建一个对象(默认为本地时区).然后getTime()从中获取毫秒数midnight 1 Jan 1970 **GMT**.因此,该值将被本地时区的距离所抵消GMT.
如何解决:
您可以通过在dateFormat调用之前设置对象的时区来修复它,parse如下所示:
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
Run Code Online (Sandbox Code Playgroud)