减去两个java。sql。时间戳给出的年份不正确
我试图从sql中获取时间戳,需要计算两个时间戳之间的差异
//startDate = 2014-07-10 16:07:00.0
//endDate = 2014-07-11 04:07:00.0
//END_DATE = 2014-07-18 08:07:00.0
private Timestamp calculateWflTime(String vehicleNum, Timestamp startDate,
Timestamp endDate) {
Timestamp t1 = new Timestamp (END_DATE.getTime()); //2014-07-18 08:07:00.0
Timestamp t2 = new Timestamp (startDate.getTime()); //2014-07-10 16:07:00.0
Timestamp wflTime = null;
long diff=0;
if(VEH_NUM == vehicleNum){
diff = t1.getTime()-t2.getTime();//diff(END_DATE,startDate);
}
wflTime = new Timestamp( Math.abs(diff/(1000*60*60*24)));
return wflTime; //1970-01-01 05:30:00.007
}
# 1 楼答案
表情
从领域的角度来看,它在语义上是错误的。为什么?您尝试将一个时间量(实际上是一个以毫秒为单位的持续时间,没有固定在时间轴上)转换为一个时间点,该时间点在这里是固定的,可以从UNIX epoch(1970-01-01)开始计数。这就像从几何角度将一个长度转换成一个点
两个时间戳之间的差异不应该是一个新的时间戳,而应该是一个持续时间(这里是以毫秒为单位的diff变量)。这取决于你如何将其正常化为几年或几个月
回复OP后更新
清洁Joda溶液:
Time4J解决方案
此外,您还可以使用my library Time4J实现这个替代方案,该库包含一个可本地化的
PrettyTime
类,用于自版本1.2以来的持续时间格式设置:最后但并非最不重要的一点是,在格式化持续时间之前,请尝试评估字符串条件,并使用equals()而不是==,例如:
# 2 楼答案
关于1970年的日期,一般来说,所有日期都是一个数字,表示1970年1月1日午夜后的毫秒数,因此,如果你将与类似日期之间的差异显示为一个日期,那么你将得到1970年的数据。你需要将答案视为毫秒,并将天、小时、分钟计算为时间。希望这有帮助