[英]SimpleDateFormat format date between to dates issue
我需要计算两个日期之间的时间间隔,现在是一个日期。 我正在使用SimpleDateFormat
格式化日期。
public String getPeriod(Date endDate) {
String format;
Date now = new Date();
long period = endDate.getTime() - now.getTime();
if (now.after(endDate)) {
return "passed";
} else {
if (period < 1000 * 60 * 60)
format = "m'M' s'S'";
else if (period < 1000 * 60 * 60 * 24)
format = "k'H' m'M'";
else
format = "'Too much'";
SimpleDateFormat formatter = new SimpleDateFormat(format);
return formatter.format(new Date(period)) + " / for testing - " + period / 3600000 + " hours";
}
}
因此,例如,如果endDate
等于Wed Nov 12 13:30:02 EET 2014 (EST)
我将输入以下内容:
1 H 36 M / for testing - 22 hours
如您所见,我的测试计算和格式的方法结果不匹配。 我究竟做错了什么?
差异是由于时区。 例如,在我的情况下,将以小时为单位的时间作为参数,我得到3H作为输出,因为日期是Thu Jan 01 03:00:00 EET1970。请注意EET(我来自东欧洲)。
如果您通知Java使用GMT时间,则您的代码将起作用,如新的Date(long)描述中所述:
分配一个Date对象,并将其初始化为表示自标准基准时间(即“纪元”)(即GMT 1970年1月1日)以来指定的毫秒数。
另外,请记住,日期不能给出完美的结果。 使用以程序确定的日期精确到1小时(无毫秒/分钟差),日期计算得出的偏移量为59分钟,59秒和999毫秒。 如果需要更精确的值,则应使用纳秒。
但是,其他评论者是正确的。 您不应该以这种方式使用Java日期/日历,因为它是一个错误工厂(这只是一个小案例)。 您应该检查其他库(例如yoda time),或者如果您只需要像这样的简单计算,请自己完成。
希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.