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