gpt4 book ai didi

java - 使用 Date.parse(dateString) 给定日期的毫秒数是错误的

转载 作者:行者123 更新时间:2023-12-02 07:39:31 27 4
gpt4 key购买 nike

我的日期字符串为 1/1/1970 8:00 AM

正确的毫秒数应为8 小时 * 每小时 60 分钟 * 每分钟 60000 毫秒 = 28800000

但是,使用 Date.parse(dateString) 返回 50400000

我不明白什么?

编辑

我最初尝试使用 date.getTime();

这是我的原始代码:

SimpleDateFormat dateFmt = new SimpleDateFormat("MM/dd/yyyy h:mm a");
dateFmt.setTimeZone(TimeZone.getTimeZone("UTC"));
StringBuilder sb = new StringBuilder();
sb.append(month).append("/");
sb.append(day).append("/");
sb.append(year).append(" ");
sb.append(pad(hour)).append(":");
sb.append(pad(minute)).append(" ");;
sb.append(ampm);
Date date = new Date();

date = dateFmt.parse(sb.toString());

date.getTime()

最佳答案

这几乎肯定是问题所在:

If no time zone is specified, the local time zone is assumed.

我的猜测是,您所在的时区是 Unix 纪元的 UTC-6,因此本地时间上午 8 点是 UTC 下午 2 点。

然后,当有更好的替代方法(SimpleDateFormat,它允许您设置时区)可用时,您会使用已弃用的方法,这是一个更根本的问题。方法因原因而被弃用。不管怎样,你不应该只使用已弃用的方法,否则你会不断遇到这样的事情。

事实上,您最好使用 Joda Time如果可以的话 - 但至少远离 Date 中已弃用的方法。

示例代码:

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy h:mm aa", Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));
long millis = format.parse(text).getTime();

您可能需要将 dd/MM 更改为 MM/dd,具体取决于您的日期采用的格式 - 我们无法从“01”中看出/01”。请注意时区和区域设置的显式设置。

关于java - 使用 Date.parse(dateString) 给定日期的毫秒数是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13074497/

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