我有一个 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);
问题是我得到了一个像 -2722.515
这样的值,我不知道为什么。
为什么是负数?
代码有问题吗?
当我将此时间戳转换为 mm ss S
时,与实际时间不匹配,这似乎是另一个问题!
最佳答案
这是一个时区差异问题。
由于您只指定了分钟和秒,因此日期将为 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);
打印出来的小时应该是 GMT
相对于本地时区的时差。
这样做的原因是:
SimpleDateFormat
是语言环境敏感的,因此 dateFormat.parse(timeStamp)
将返回为给定时区创建一个 Date
对象(默认为本地时区)。然后 getTime()
获取从 1970 年 1 月 1 日午夜 **GMT**
开始的毫秒数。因此,该值将根据本地时区与 GMT
的距离进行偏移。
如何修复:
您可以通过在调用 parse
之前设置 dateFormat
对象的时区来修复它,如下所示:
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
关于java - 为什么 SimpleDateFormat.parse().getTime() 返回不正确(负)值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15003498/