gpt4 book ai didi

java - 为什么 SimpleDateFormat.parse().getTime() 返回不正确(负)值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:18 26 4
gpt4 key购买 nike

我有一个 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(mmss是当前时间的分钟和秒)。

我将您的示例简化为:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com