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

标签 java date milliseconds

我的日期字符串为 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/

相关文章:

java - 如何调整 Barbecue API 生成的文本的大小?

date - 从日期批处理文件中分离日期月份和年份

Java 正则表达式 - YYYYMMDD

java - Android:错误:-source 1.3 中不支持注释

java - 如何通过 @Id 使用 CrudRepository 进行批量删除?

java - 我想在java中使用gsm调制解调器通过串行端口发送和接收短信

mysql - 在mysql中对unix类型日期进行排序

java - Slick2D 每 0.8 渲染一次

html - 是否有可能以毫秒为单位获取当前的 html5 视频时间范围?

javascript - 在 JavaScript 中将 UTC 毫秒转换为中部时间