【发布时间】:2019-04-24 16:27:27
【问题描述】:
我知道这个问题之前已经在这里被问过很多次了,但是我一直没能找到任何关于我的案例的具体信息。我试图找出当前日期时间和以前的日期时间之间的差异,每个日期时间的格式都为yyyy-MM-dd HH:mm:ss.s。根据here 给出的答案,我想出了以下代码:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.s");
String earliestRunTime = "2017-12-16 01:30:08.0";
Date currentDate = new Date();
log.info("Current Date: {}", format.format(currentDate));
try {
Date earliestDate = format.parse(earliestRunTime);
long diff = currentDate.getTime() - earliestDate.getTime();
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000) % 30;
long diffMonths = diff / (30 * 24 * 60 * 60 * 1000) % 12;
long diffYears = diff / (12 * 30 * 24 * 60 * 60 * 1000);
return String.format("%s years, %s months, %s days, %s hours, %s minutes, %s seconds",
diffYears, diffMonths, diffDays, diffHours, diffMinutes, diffSeconds);
}
catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}
当我运行代码时,JSON 返回以下结果:
lifetime: "41 years, -1 months, 14 days, 9 hours, 42 minutes, 37 seconds"
我有两个问题:
- 41 年和负数的计算哪里出错了?
- 我有更好的方法吗?我当前的设置不考虑闰年或 365 天一年,我需要将这些考虑在内。
【问题讨论】:
-
结果应该是怎样的?如果相差 1 年,是打印“1 年 12 个月 365 天”还是“1 年 0 个月 0 天”?
-
想一想:如果报告精确到秒很重要,但时间跨度可能包括 28、29、30 或 31 天的月份,那么也许你可能需要重新考虑您的用例。
-
@NeplatnyUdaj 理想情况下,差异应该是 1 年 0 个月 0 天。
-
@SolomonSlow 好点,我什至没有想到。
-
您正在使用多年前被 java.time 取代的糟糕类。永远不要使用
Date。
标签: java date datetime difference date-difference