Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 日期早于一个月前_Java_Date - Fatal编程技术网

Java 日期早于一个月前

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

如何检查给定日期是否早于一个月前?什么是最快的算法?我必须考虑到不同的月份有不同的天数。

更新为Java 8

该类可用于:

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类文档引用的规则:

此方法分三步从月份字段中减去指定金额:

  • 从“年度月份”字段中减去输入月份

  • 检查结果日期是否无效

  • 如有必要,将月份日期调整为最后一个有效日期

  • 例如,2007-03-31减去一个月将导致无效日期2007-02-31。将选择月份的最后一个有效日期2007-02-28,而不是返回无效结果

    或者,在你的商业规则中,你的意思是“30天”,而不是一个日历月

    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 ) ;