gpt4 book ai didi

java - 两个日期之间的差异(以天为单位)各不相同

转载 作者:行者123 更新时间:2023-12-02 06:18:04 24 4
gpt4 key购买 nike

Date d = new Date(today.getTimeInMillis());
Date d1 = new Date(dueDate.getTimeInMillis());

int daysUntil = (int) ((d1.getTime() - d.getTime())/ (1000 * 60 * 60 * 24));

使用上面的代码,其中 today 是设置为当天 00:00 的日历,dueDate 设置为我所在日期的 00:00与今天相比,我的结果有所不同。

其中有些东西会有所不同,使我的输出要么是 x 要么是 x+1,其中 x 是正确的答案。

这里出了什么问题,我能做些什么来使它更稳定?

最佳答案

模糊问题

您没有提供实际值,因此我们无法准确确定问题所在。我们不知道 todaydueDate 变量是什么。

过时的

这个问题现在已经过时了,因为包括 java.util.Date/.Calendar 在内的麻烦的旧日期时间类已被新的 java.time 取代。框架。请参阅Tutorial 。定义为JSR 310 ,灵感来自Joda-Time ,并由 ThreeTen-Extra 扩展项目。

在java.time中:

  • 瞬间是 UTC 时间线上的一个时刻。
  • ZoneId 代表时区。使用正确的时区名称,切勿使用“EST”或“IST”等 3-4 个字母的代码,因为它们既不标准化也不唯一。
  • 从概念上讲,ZonedDateTime = Instant + ZoneId。

三十额外

不幸的是,java.time 不包含计算日期时间值之间经过的天数的工具。我们可以使用ThreeTen-Extra项目及其Daysbetween 一起上课提供该计算的方法。 ThreeTen-Extra 项目是 JSR 过程中被认为对 java.time 非必需的功能的集合。

ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime now = ZonedDateTime.now ( zoneId );
ZonedDateTime then = now.minusDays ( 4 );
ZonedDateTime due = now.plusDays ( 3 );
Integer days = org.threeten.extra.Days.between ( then , due ).getAmount ();

转储到控制台。

System.out.println ( "From then: " + then + " to due: " + due + " = days: " + days );

From then: 2015-10-31T16:01:13.082-04:00[America/Montreal] to due: 2015-11-07T16:01:13.082-05:00[America/Montreal] = days: 7

乔达时间

对于 Android 或旧版本的 Java,请使用优秀的 Joda-Time图书馆。

Days类是智能的,可以处理异常,例如 Daylight Saving Time (夏令时)。

请注意,与 java.util.Date 不同,Joda-Time DateTime对象知道自己的时区。

// Specify a time zone rather than rely on default.
DateTimeZone timeZone = DateTimeZone.forID( "America/Regina" ); // Or "Europe/London".

DateTime now = new DateTime( timeZone );
DateTime startOfToday = now.withTimeAtStartOfDay();

DateTime fewDaysFromNow = now.plusDays( 3 );
DateTime startOfAnotherDay = fewDaysFromNow.withTimeAtStartOfDay();

Days days = Days.daysBetween( startOfToday, startOfAnotherDay );

转储到控制台...

System.out.println( days.getDays() + " days between " + startOfToday + " and " + startOfAnotherDay + "." );

运行时...

3 days between 2014-01-21T00:00:00.000-06:00 and 2014-01-24T00:00:00.000-06:00.

关于java - 两个日期之间的差异(以天为单位)各不相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21272737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com