Java SimpleDateFormat格式日期介于发布日期之间
我需要计算两个日期之间的时间,一个日期是现在。我使用Java SimpleDateFormat格式日期介于发布日期之间,java,Java,我需要计算两个日期之间的时间,一个日期是现在。我使用SimpleDateFormat格式化日期 public String getPeriod(Date endDate) { String format; Date now = new Date(); long period = endDate.getTime() - now.getTime(); if (now.after(endDate)) { return "passed"; }
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";
}
}
正如您所看到的,我的测试计算和格式的方法结果不匹配。我做错了什么?差异是由时区造成的。例如,在我的例子中,给定一小时内的时间作为参数,我得到3H作为输出,因为日期是1970年1月1日星期四03:00:00 EET。注意EET(我来自东欧) 如果您通知java使用GMT时间,您的代码将正常工作,正如新日期(long)描述中所述: 分配日期对象并将其初始化以表示指定的日期 自标准基准时间(称为“基准时间”)起的毫秒数 “纪元”,即1970年1月1日00:00:00 GMT 另外,请记住,日期并不能给出完美的结果。使用编程确定的日期精确到1h appart(无毫秒/分钟差异),日期计算得出的偏移量为59分钟、59秒和999毫秒。如果需要更精确的值,则应使用纳秒 然而,其他评论者是对的。您不应该以这种方式使用Java日期/日历,因为它是一个bug工厂(这只是一个极端情况)。您应该查看其他库(例如yoda time),或者如果您只需要像这样的简单计算,请自己进行
希望能有所帮助。java.util.Date类有点乱,以后我会寻找替代方案。java.util.Calandar类也是一团乱麻,我会研究Joda Time:)
SimpleDateFormat
用于格式化日期
——一个时间点。两次之间的差异不是时间点。你不应该用它。
1 H 36 M / for testing - 22 hours