我写了一个返回字符串格式化日期的毫秒值的方法,由于某种原因,它给了我将来39000年的日期。任何想法为什么?
private long getTimeInMs(String currentStartTimeString) {
//String newDateString = currentStartTimeString.substring(6,10)+"-"+currentStartTimeString.substring(3, 5)+"-"+currentStartTimeString.substring(0, 2)+ "T" + currentStartTimeString.substring(11);
String newDateString = currentStartTimeString.substring(0,19);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long timeInMs;
try {
timeInMs = df.parse(newDateString).getTime();
} catch (ParseException e) {
log.error("Failed to parse current Start Time",e);
return 0;
}
return timeInMs;
}
如果我输入日期字符串“2009-07-07 10:51:01.15”,则返回1246960261000,实际上是星期三06月06日41484 11:16:40 GMT + 0100(GMT日光时间)
好吧我认为问题在于它正在给ms过去Java epoc并且我正在对unix时代进行评估......
答案 0 :(得分:17)
我猜你是从getTime()解释返回的值,好像它是一个Unix time_t值。它不是 - 它超过了Java时代的毫秒,而不是超过Unix时代的秒数。
答案 1 :(得分:4)
对我来说很好看。从解析toString到“Tue Jul 07 10:51:01 BST 2009”(我在英国时区这里)出来的Date对象,但这应该没什么大不同)。 millis值1246960261000是正确的,为什么你认为评估到遥远的未来?你是怎么计算的?
答案 2 :(得分:1)
在Java 6中运行代码,我得到1246978261000,结果证明是正确的。
System.out.println(new Date(timeInMs));
返回
Tue Jul 07 10:51:01 EDT 2009
修改强>
确认其他人建议您查看秒数(而不是毫秒数):
System.out.println(new Date(timeInMs*1000));
产量
Mon Mar 02 13:16:40 EST 41485
答案 3 :(得分:1)
值正确,实际上是:
(((((1246989061000 / 1000) / 60)/60)/24)/365)
给出
鉴于0是1970,39.54176373033992年是正确的。