Java 使用date.parse(dateString)表示给定日期的毫秒是错误的
我有一个日期字符串Java 使用date.parse(dateString)表示给定日期的毫秒是错误的,java,date,milliseconds,Java,Date,Milliseconds,我有一个日期字符串1970年1月1日上午8:00 正确的毫秒应为8小时*60分钟/小时*60000毫秒/分钟=2880000 但是,使用Date.parse(dateString)返回5040000 我不明白什么 编辑 我最初尝试使用date.getTime() 这是我的原始代码: SimpleDateFormat dateFmt = new SimpleDateFormat("MM/dd/yyyy h:mm a"); dateFmt.setTimeZone(TimeZone.getTimeZo
1970年1月1日上午8:00
正确的毫秒应为8小时*60分钟/小时*60000毫秒/分钟=2880000
但是,使用Date.parse(dateString)
返回5040000
我不明白什么
编辑
我最初尝试使用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()
这几乎肯定是问题所在: 如果未指定时区,则假定为本地时区 我猜您所在的时区在Unix时代是UTC-6,所以当地时间上午8点是UTC下午2点 还有一个更根本的问题是,如果有更好的替代方法(
SimpleDateFormat
,它允许您设置时区)可用,则使用不推荐的方法。方法被弃用是有原因的。无论如何,您不应该只使用不推荐的方法,否则您将继续遇到类似的情况
事实上,如果可能的话,您最好使用这些方法,但至少不要使用Date
中不推荐的方法
示例代码:
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy h:mm aa", Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));
long millis = format.parse(text).getTime();
根据日期的格式,您可能需要将日/日更改为日/日-我们无法从“01/01”中分辨出来。请注意时区和区域设置的显式设置。这是因为您的本地时区。使用简单的日期格式和时区,如下所示,根据
UTC
时区获取所需的值:
DateFormat format = new SimpleDateFormat("MM/dd/yyyy hh:mm a");
String dateS = "1/1/1970 8:00 AM";
format.setTimeZone(TimeZone.getTimeZone("UTC"));
format.setLenient(true);
Date date = format.parse(dateS);
System.out.println(date.getTime()); //<-- prints 28800000
DateFormat格式=新的SimpleDataFormat(“MM/dd/yyyy hh:MM a”);
字符串日期=“1970年1月1日上午8:00”;
format.setTimeZone(TimeZone.getTimeZone(“UTC”));
格式。setLenient(true);
日期=format.parse(日期);
System.out.println(date.getTime())//为什么要使用不推荐的Date.parse()
?SimpleDataFormat返回一个日期对象,我希望它是一个长的。请告诉我如何使用您推荐的方法完成此操作,谢谢+1@Jon双向飞碟。但你可以试着告诉他住在哪里,而不是告诉他那些信息。”你怎么知道的?':-)@AndroidAddict:Date.getTime()
也许吧?(事实上,阅读文档并不难做到这一点……)我也使用了这种方法,但仍然得到了相同的结果。请给我举个例子。另外,请保持你的评论具有建设性,因为可能是你不理解某些东西。@Android上瘾者:Jon Skeet不理解某些东西?真有趣。
DateFormat format = new SimpleDateFormat("MM/dd/yyyy hh:mm a");
format.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = format.parse("1/1/1970 8:00 AM");
System.out.println(date.getTime()); //<-- prints 28800000