我保存了一个日期,然后使用
将其与当前日期进行比较DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
introDateTimeSaved = formatter.parseDateTime(introDateViewedString);
introDays = Days.daysBetween(introTodaysDate, introDateTimeSaved);
以确定自保存日期更新以来的天数。这是为了显示按下特定按钮的时间。问题是,这些日子已经过了24小时,我希望它能在几天之内完成。例如:
保存日期变量:2016-10-15 08:26:00
今日日期变量2016-10-16 08:25:00
这会返回0天的差异,我最好的猜测是因为这两个日期之间的时间是23小时59分钟。我希望这返回1,因为它从15日到16日相差1天,如果是14日,那么返回2,今天是16日等。
答案 0 :(得分:0)
您可以使用以小时为单位的差异,然后除以24
并向下舍入。
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
introDateTimeSaved = formatter.parseDateTime(introDateViewedString);
Period p = new Period(introDateTimeSaved, introTodaysDate);
int hours = p.getHours();
int days = Math.floor(hours/24.0);
编辑:
Interval是使用Joda Time library计算的,因为JDK Date
API操作起来很糟糕。
答案 1 :(得分:0)
试试这个
int dayDifference= ((int)((startDate.getTime()/(24*60*60*1000)) - (int)(endDate.getTime()/(24*60*60*1000))));
顺便说一句,这是使用标准的java.util.Date类。
答案 2 :(得分:0)
按照之前的建议应用基于时间的解决方案是危险的,而且经常是错误的。证明选择围绕日光节约变化的输入(在我当地时区欧洲/柏林):
String introDateViewedString = "2016-03-26 00:00:00";
String introTodaysDateString = "2016-03-31 00:00:00";
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime introDateTimeSaved = formatter.parseDateTime(introDateViewedString);
DateTime introTodaysDate = formatter.parseDateTime(introTodaysDateString);
System.out.println(introDateTimeSaved); // 2016-03-26T00:00:00.000+01:00
System.out.println(introTodaysDate); // 2016-03-31T00:00:00.000+02:00
以下代码证明基于时间的解决方案通常是错误的:
Hours hours = Hours.hoursBetween(introDateTimeSaved, introTodaysDate);
System.out.println(hours); // PT119H
System.out.println(hours.getHours() / 24); // 4 (should be 5)
以下代码证明仅使用period.getHours()
是一个坏主意,因为该方法仅产生部分数量,并忽略了有问题的时期也可能包含其他单位的事实:
Period p = new Period(introDateTimeSaved, introTodaysDate); // P5D
System.out.println(p); // P5D
int days = p.getHours() / 24;
System.out.println(days); // 0 (period does not contain hours but days)
那么最好的方法是什么?
如果您对时钟时间不感兴趣,请使用普通日历日期!
String introDateViewedString = "2016-03-26 00:00:00";
String introTodaysDateString = "2016-03-31 00:00:00";
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime introDateTimeSaved = formatter.parseLocalDateTime(introDateViewedString);
LocalDateTime introTodaysDate = formatter.parseLocalDateTime(introTodaysDateString);
LocalDate date1 = introDateTimeSaved.toLocalDate(); // 2016-03-26
LocalDate date2 = introTodaysDate.toLocalDate(); // 2016-03-31
System.out.println(Days.daysBetween(date1, date2).getDays()); // 5
此解决方案的优势还在于不使用基于划分数字等的任何本土计算。在日期和时间的上下文中使用此类算法应该让用户响起警报铃声(在大多数情况下)。