LocalDate today=LocalDate.now();
活动日期是:
eventDate=LocalDate.of(year, monthOfYear,dayOfMonth);
(来自日期选择器对话框)
我试图计算它们之间的天差...我发现的最短的事情就是:
int DaysDifference = Period.between(eventToDisplay.getEventDate(),today).getDays();
虽然第一个对象是"今天",而第二个对象是" eventToDisplay.getEventDate()。"它对我没有用,它显示错误的天数。
我也试过这样做:
eventToDisplay.getEventDate().compareTo(today)
也没有工作...... 我也试着在没有joda-time的情况下做到这一点,因为我遇到了麻烦,因为我试图用日期和时间来做...
我发现的其他事情既冗长又复杂,我想也许有更好的方法,没有joda-time。
修改
我刚试过这个:
Calendar now = Calendar.getInstance();
Calendar chosenDate=Calendar.getInstance();
chosenDate.set(eventToDisplay.getEventDate().getYear(),eventToDisplay.getEventDate().getMonth().getValue(),eventToDisplay.getEventDate().getDayOfMonth());
long def= chosenDate.getTimeInMillis() - now.getTimeInMillis();
long DaysDifference =TimeUnit.MILLISECONDS.toDays(def);
没有为我工作
修改 这对我有用:
LocalDate today=LocalDate.now();
Calendar now = Calendar.getInstance();
now.set(today.getYear(),today.getMonthValue(),today.getDayOfMonth());
Calendar chosenDate=Calendar.getInstance();
chosenDate.set(eventToDisplay.getEventDate().getYear(),eventToDisplay.getEventDate().getMonthValue(),eventToDisplay.getEventDate().getDayOfMonth());
long def= chosenDate.getTimeInMillis() - now.getTimeInMillis();
long daysDifference =TimeUnit.MILLISECONDS.toDays(def);
答案 0 :(得分:0)
你可以使用这样的东西:
Calendar now = Calendar.getInstance();
Calendar end=Calendar.getInstance();
end.set(<year>, <month>, <day>);
long def= end.getTimeInMillis() - now.getTimeInMillis();
long days =TimeUnit.MILLISECONDS.toDays(def);
答案 1 :(得分:0)
由于您可以使用 java.time 中的 LocalDate
,现代 Java 日期和时间 API,我强烈建议您坚持使用 java.time。当您知道如何计算差异时,计算将变得简单明了:
LocalDate today = LocalDate.now(ZoneId.systemDefault());
LocalDate eventDate = LocalDate.of(2021, 5, 5);
long differenceDays = ChronoUnit.DAYS.between(today, eventDate);
System.out.println("Difference is " + differenceDays + " days.");
我今天跑步时的输出(4 月 18 日在我的 tme 区域):
<块引用>相差 17 天。
如果您的日期选择器使用从 0 开始的月份(有些日期选择器疯狂地使用 0 表示 1 月到 11 日表示 12 月),请记住在将月份数字加 1,然后再将其传递给 LocalDate
。
int DaysDifference = Period.between(eventToDisplay.getEventDate(),today).getDays();
Period
类表示年、月和日的时间段。由于月份的长度不同,Period
不对应于任何确切的天数,因此在这里使用它是不正确的类。您尝试使用其 getDays
方法,该方法为您提供期间的天数部分,而不是月数或年数。所以如果这两天相隔不到一个月,你会得到正确的结果,否则不会。例如,如果两个日期相隔 1 个月 3 天,则您只会得到 3 天。
在您多次尝试中使用的 Calendar
类设计不佳且早已过时。用它正确计算天数真的很麻烦,所以难怪你的尝试给出了错误的结果。
您的两次尝试都是错误的,原因至少有两个:
Calendar
具有日期和一天中的时间。因此,通过找出以毫秒为单位的差异并除以您认为一天中的毫秒数,您将得到不同的结果,具体取决于每个 Calendar
对象中的时间。您的代码调用 Calendar.getInstance()
两次。在极端情况下,您的代码可能会在午夜运行,因此第一个 Calendar
中的时间将接近 23:59:59,第二个接近 00:00,这几乎肯定会给您带来 1 的错误一天。此外,您说有效的代码片段中的这一行绝对是错误的:
now.set(today.getYear(),today.getMonthValue(),today.getDayOfMonth());
您正在使用 LocalDate
中从 1 开始的月份数,例如 4 表示四月,作为 Calendar
中从 0 开始的月份数,例如 4 表示五月。因此,您的 Calendar
已关闭 1 个月。由于我没有您的完整代码,在某些情况下可能会被另一个错误平衡,导致另一个 Calendar
也有 1 个月的时间,我不知道。由于月份的长度不同,您有时仍会收到长达 3 天的错误。