Java 日期早于一个月前
如何检查给定日期是否早于一个月前?什么是最快的算法?我必须考虑到不同的月份有不同的天数。更新为Java 8 该类可用于:Java 日期早于一个月前,java,date,Java,Date,如何检查给定日期是否早于一个月前?什么是最快的算法?我必须考虑到不同的月份有不同的天数。更新为Java 8 该类可用于: LocalDate aDate = LocalDate.parse("2017-01-01"); return aDate.isBefore( LocalDate.now().minusMonths(1)); 对于以前的版本,Calendar类可以工作 Calendar calendar = Calendar.getInstance(); calendar.add( Cal
LocalDate aDate = LocalDate.parse("2017-01-01");
return aDate.isBefore( LocalDate.now().minusMonths(1));
对于以前的版本,Calendar类可以工作
Calendar calendar = Calendar.getInstance();
calendar.add( Calendar.MONTH , -1 );
return aDate.compareTo( calendar.getTime() ) < 0;
印刷品
true
false
false
使用:
tl;博士
java.time
现代方法使用java.time类,而不是麻烦的遗留类,如Date
&Calendar
今天
首先获取当前日期。该类表示一个仅限日期的值,不包含一天中的时间和时区
时区对于确定日期至关重要。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,中午夜后几分钟是新的一天,而中仍然是“昨天”
以大陆/地区
的格式指定,例如,或太平洋/奥克兰
。切勿使用3-4个字母的缩写,如EST
或IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)
一个月前
接下来,确定目标
以下是Java 8类文档引用的规则:
此方法分三步从月份字段中减去指定金额:
LocalDate thirtyDaysAgo = today.minusDays( 30 ) ;
输入
给你一个约会。应该作为LocalDate
对象传递给代码
LocalDate ld = LocalDate.of( 2017 , Month.JANUARY , 23 ) ;
如果来自字符串,请使用标准格式。对于其他格式,请在堆栈溢出中搜索DateTimeFormatter
class
LocalDate ld = LocalDate.parse( "2017-01-23" ) ;
比较
现在比较一下。调用,isEqual
,isAfter
方法
Boolean outdated = ld.isBefore( monthAgo ) ;
演出
至于问题中提出的绩效问题:别担心。这个月前,计算和比较不太可能成为应用程序的瓶颈。避免
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 从哪里获得java.time类
- ,及以后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 该项目专门为Android采用了ThreeTen Backport(如上所述)
- 看
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如、、.FYI,麻烦的旧日期时间类,如、
java.text.SimpleTextFormat
现在已被这些类取代。请参阅。仅供参考,该项目目前正在进行中,团队建议迁移到类。看见
LocalDate monthAgo = today.minusMonths( 1 ) ;
LocalDate thirtyDaysAgo = today.minusDays( 30 ) ;
LocalDate ld = LocalDate.of( 2017 , Month.JANUARY , 23 ) ;
LocalDate ld = LocalDate.parse( "2017-01-23" ) ;
Boolean outdated = ld.isBefore( monthAgo ) ;