Roy*_*ley 2 java date milliseconds
我有一个日期字符串 1/1/1970 8:00 AM
应该是正确的毫秒 8 hours * 60 minutes per hour * 60000 milliseconds per minute = 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()
Run Code Online (Sandbox Code Playgroud)
这几乎肯定是问题所在:
如果未指定时区,则假定为本地时区.
我的猜测是你所处的时区是在Unix时代的UTC-6,所以当地时间早上8点是UTC时间.
然后,当有更好的替代方法(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();
Run Code Online (Sandbox Code Playgroud)
您可能想要更改dd/MM
为MM/dd
,取决于您的日期将采用何种格式 - 我们无法从"01/01"判断.请注意时区和区域设置的显式设置.