Ted*_*opp 14
使用该Calendar课程.如果您已有Date对象,仍可以使用Calendar:
Date aDate = . . .
Calendar today = Calendar.getInstance();
today.setTime(aDate);
Calendar tomorrow = Calendar.getInstance();
tomorrow.setTime(aDate);
tomorrow.add(Calendar.DAY, 1);
Date tomorrowDate = tomorrow.getTime(); // if you need a Date object
Run Code Online (Sandbox Code Playgroud)
答案取决于你想要达到的目标.
一种方法,可以是以毫秒为单位检查差异.可以通过计算24小时(毫秒)
24 * 60 * 60 * 1000 = 86400000
h min sec millis
Run Code Online (Sandbox Code Playgroud)
(在代码中,您还可以编写TimeUnit.HOURS.toMillis(24)哪个IMO更具描述性)
所以现在你可以检查两个日期之间的差异(以毫秒表示)是否大于86400000.
myUtilDate_B
.toInstant()
.equals(
myUtilDate_A.toInstant().plus( 24 , ChronoUnit.HOURS )
) // Exactly 24 hours apart.
Run Code Online (Sandbox Code Playgroud)
…和…
myUtilDate_B
.toInstant()
.isAfter(
myUtilDate_A.toInstant().plus( 24 , ChronoUnit.HOURS )
) // Over 24 hours apart.
Run Code Online (Sandbox Code Playgroud)
另外...
Duration.between( myUtilDate_A , myUtilDate_B )
.compareTo( Duration.ofHours( 24 ) )
// Returns 0 if exactly 24 hours apart,
// >0 if over 24 hours apart.
Run Code Online (Sandbox Code Playgroud)
您特别要求比较两个日期时间,询问是否:
compareTo你提到的方法不会这样做.它旨在仅仅判断一个时刻是相同的,更晚的还是更快的.该方法不关心特定的时间跨度,例如24小时.
您明确指出日期无关紧要.因此,您希望忽略夏令时(DST)等异常情况,这些异常会使一天长于或短于24小时.
所以我们可以在UTC工作.不需要时区.
如果您指的是java.util.Date对象,请先将它们转换为java.time对象.该Date班是麻烦的旧日期时间类,随着的一部分Calendar,这是现在的传统,由java.time类取代.
相当于java.util.Date是java.time.Instant.该Instant级表示时间轴上的时刻UTC,分辨率为纳秒(最多9个(9)小数的位数).
您可以通过添加到旧类的新方法转换为java.time类型.
Instant start = myUtilDate_Start.toInstant();
Instant stop = myUtilDate_Stop.toInstant();
Run Code Online (Sandbox Code Playgroud)
定义我们关心的差距,在这种情况下,二十四小时,作为一个Duration对象.
Duration d = Duration.ofHours( 24 ); // We mean literally 24 hours, not a day.
Run Code Online (Sandbox Code Playgroud)
用它Duration来计算24小时后的值.通过ChronoUnit枚举定义小时数.
Instant target = start.plus( 24 , ChronoUnit.HOURS );
Run Code Online (Sandbox Code Playgroud)
最后,比较第二个日期时间值.打电话equals和isAfter.
Boolean isExactly24HoursLater = stop.equals( target );
Boolean isOver24HoursLater = stop.isAfter( target );
Run Code Online (Sandbox Code Playgroud)
该java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat.
现在处于维护模式的Joda-Time项目建议迁移到java.time.
要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.
从哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.
更新:现在处于维护模式的Joda-Time项目建议迁移到java.time类.此部分在此处保留完整的历史记录.
Joda-Time使这项工作更容易.
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime dateTimeInQuestion = new DateTime( 2014, 1, 2, 3, 4, 5, 6, timeZone ); // Or: new DateTime( someJavaDotUtilDotDateObject );
DateTime now = new DateTime( timeZone );
DateTime twentyFourHoursFromNow = now.plusHours( 24 ); // Ignores Daylight Saving Time (DST). If you want to adjust for that, call: plusDays( 1 ) instead.
DateTime isDateTimeInQuestionAfter24HoursFromNow = dateTime.isAfter( twentyFourHoursFromNow );
Run Code Online (Sandbox Code Playgroud)
如果您真的打算考虑第二天的挂钟时间,请致电plusDays( 1 )而不是plusHours( 24 ).Joda-Time然后调整夏令时(DST)或其他异常.例如,在美国,由于我们的1小时DST愚蠢,这可能意味着25小时而不是24小时.
如果真的要测试所讨论的日期时间是否在 24小时的时间范围内,请使用Joda-Time的三个类别中的一个时间跨度:间隔,持续时间和周期.
Interval interval = new Interval( now, twentyFourHoursFromNow );
boolean isDateTimeInQuestionContainedWithinNext24Hours = interval.contains( dateTimeInQuestion );
Run Code Online (Sandbox Code Playgroud)
对于那种比较,Joda-Time使用"半开"逻辑.这意味着开始日期时间是包含的,而结尾是独占的.换句话说,比较大于或等于(> =)开始,但少于(<)结束.在处理日期时间时,这种方法通常最有意义.
| 归档时间: |
|
| 查看次数: |
19746 次 |
| 最近记录: |