Java 检查一个日期是否正好是另一个日期之后的24小时或更长时间
我使用Java中的compareTo方法尝试检查某个日期是否大于或等于另一个日期后的24小时 如何确定要将日期与哪个整数进行比较?使用该类。如果您已经有一个Java 检查一个日期是否正好是另一个日期之后的24小时或更长时间,java,date,Java,Date,我使用Java中的compareTo方法尝试检查某个日期是否大于或等于另一个日期后的24小时 如何确定要将日期与哪个整数进行比较?使用该类。如果您已经有一个日期对象,您仍然可以使用日历: Date aDate = . . . Calendar today = Calendar.getInstance(); today.setTime(aDate); Calendar tomorrow = Calendar.getInstance(); tomorrow.setTime(aDate); tomor
日期
对象,您仍然可以使用日历
:
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
要查找日期之间的差值:简而言之
long endL = end.getTimeInMillis() + end.getTimeZone().getOffset( end.getTimeInMillis() );
long startL = this.getTimeInMillis() + this.getTimeZone().getOffset(this.getTimeInMillis());
return (endL - startL) / MILLISECS_PER_DAY;
具体地说,
答案取决于你想要达到的目标 一种方法是以毫秒为单位检查差异。24小时(毫秒)可通过以下方式计算:
24 * 60 * 60 * 1000 = 86400000
h min sec millis
(在代码中,您还可以编写TimeUnit.HOURS.toMillis(24)
哪个IMO更具描述性)
所以现在您可以检查两个日期之间的差异(以毫秒为单位)是否大于86400000。tl;博士
……还有
myUtilDate_B
.toInstant()
.isAfter(
myUtilDate_A.toInstant().plus( 24 , ChronoUnit.HOURS )
) // Over 24 hours apart.
或者
Duration.between( myUtilDate_A , myUtilDate_B )
.compareTo( Duration.ofHours( 24 ) )
// Returns 0 if exactly 24 hours apart,
// >0 if over 24 hours apart.
java.time
您特别要求比较两次约会时间,以询问是否:
- 一个比另一个晚24小时吗
- 一个比另一个晚24小时以上
java.util.Date
对象,请首先将它们转换为java.time对象。Date
类与Calendar
一起是旧日期时间类的一部分,它们现在是遗留类,被java.time类取代
java.util.Date
的等价物是java.time.Instant
。该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)
您可以通过添加到旧类中的新方法来转换java.time类型
Instant start = myUtilDate_Start.toInstant();
Instant stop = myUtilDate_Stop.toInstant();
定义我们关心的间隙,在本例中为24小时,作为一个对象
使用该持续时间
计算24小时后的值。通过枚举定义小时单位
最后,比较第二个日期时间值。打电话给我
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到java.time 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 从哪里获得java.time类
- 后来
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 该项目专门针对Android采用了Three Ten Backport(如上所述)
- 看
乔达时间 更新:该项目现在处于运行状态,建议迁移到java.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 );
一天≠ 24小时
如果你真的打算考虑第二天的相同,请调用<代码> PulsDayes(1)< /C> >而不是<代码> PLUESREST(24)。然后根据夏令时(DST)或其他异常情况调整Joda时间。例如,在美国,这可能意味着25小时而不是24小时,因为我们的1小时DST愚蠢
在24小时内进行比较 如果真的要测试所讨论的日期时间是否在24小时的时间跨度内,请使用Joda time的三个时间跨度类之一:间隔、持续时间和周期Interval interval = new Interval( now, twentyFourHoursFromNow );
boolean isDateTimeInQuestionContainedWithinNext24Hours = interval.contains( dateTimeInQuestion );
对于这种比较,Joda Time使用“半开放”逻辑。这意味着开始日期时间是包含的,而结束日期时间是独占的。换句话说,比较大于或等于(>=)开始,但小于(这将帮助您检查您的日期是否是昨天
public static final long ONE_MINUTE = 60 * 1000;
public static final long ONE_HOUR = 60 * ONE_MINUTE;
public static final long ONE_DAY = 24 * ONE_HOUR;
public static boolean isYesterday(Date d) {
return DateUtils.isToday(d.getTime() + ONE_DAY);
}
在您的活动OnCreate中
//Get current date - yymmdd increases only
SimpleDateFormat formatter = new SimpleDateFormat("yyMMdd");
Date now = new Date();
int nowTime= Integer.parseInt(formatter.format(now));
//Get last login date - stored in db
int lastLogin= dbManager.getLastLoginDate();
//Check if next day
if(nowTime> lastLogin){
//Do your stuff
//Update last login date
dbManager.saveLoginDate(nowTime);
}
你能澄清一下吗?你是指24小时,一个日历日,还是指“相邻的24小时时段”?我不想检查是不是第二天,我想检查是24小时后还是更晚。你觉得GregoriaCalendar类怎么样?为什么我不能用compareTo方法比较日期?compareTo方法只告诉你一个日期是在另一个日期之前还是之后。它不告诉你如果存在差异。要查看
日期a
是否比日期b
至少多24小时,您需要在b
中添加24小时,然后您可以调用compareTo
。日历
对象更适合于此。只要记住使用long
算法,而不是int
。如果您如果你要用单位,请正确使用。现在,你的单位是t^5@DaftPunk你所说的不正确用法是什么意思?86400000
在int
范围内。而且将long
与int
进行比较应该不会有问题,比如someLong1-someLong2>someInt
@pshemounits以DayshoursMinutesSecondsmills为单位。这将不考虑日光节约(这会导致某些天为23小时,其他天为25小时)。您提供使用日历并演示如何从日期转换为日历,但我如何检查一个日历是否在另一个日历之后?这一问题尚未解决。我需要检查日历是从今天开始还是从前一天开始,因此如果您能回答这一问题,它将
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 );
Interval interval = new Interval( now, twentyFourHoursFromNow );
boolean isDateTimeInQuestionContainedWithinNext24Hours = interval.contains( dateTimeInQuestion );
public static final long ONE_MINUTE = 60 * 1000;
public static final long ONE_HOUR = 60 * ONE_MINUTE;
public static final long ONE_DAY = 24 * ONE_HOUR;
public static boolean isYesterday(Date d) {
return DateUtils.isToday(d.getTime() + ONE_DAY);
}
//Get current date - yymmdd increases only
SimpleDateFormat formatter = new SimpleDateFormat("yyMMdd");
Date now = new Date();
int nowTime= Integer.parseInt(formatter.format(now));
//Get last login date - stored in db
int lastLogin= dbManager.getLastLoginDate();
//Check if next day
if(nowTime> lastLogin){
//Do your stuff
//Update last login date
dbManager.saveLoginDate(nowTime);
}