比较Java中String类型的日期减去几天

Posted

技术标签:

【中文标题】比较Java中String类型的日期减去几天【英文标题】:Comparing dates of type String in Java minus few days 【发布时间】:2014-01-02 21:12:03 【问题描述】:

我试图比较两个字符串类型的日期(在应用 SimpleDateFormat 之后)现在我有一个应用逻辑,比如检查我收到的日期比今天的日期少 7 天。

两个日期的格式都是yyyy-mm-dd。

【问题讨论】:

如果你还是要创建日期的字符串形式,为什么不直接比较原始日期对象呢? 您不必在这里寻求帮助。你能提供一些你尝试过的东西或一些细节,比如代码吗? 查看this 以计算日期之间差异的示例,查看this 以将字符串转换为 DateTime 对象,所有这些都使用 JodaTime ;) 您想要正好少 7 天还是在 7 天内? @KevinBowersox - 不到 7 天 【参考方案1】:

乔达时间

Joda-Time 2.3 库使这种日期时间计算变得更加容易。避免使用捆绑的 java.util.Date/Calendar 类。

在这种情况下,Joda-Time 提供了方便的 minusDays() 方法以及比较方法 isBeforeisAfter

解析

该字符串格式恰好是标准ISO 8601 格式。 Joda-Time 方便地将这些标准字符串作为其日期时间实例的构造函数的参数。所以不需要定义格式化程序。

如果使用其他非标准格式,Joda-Time 有多种方法来指定用于解析字符串的格式。在 ***.com 中搜索“joda 格式”以获取许多示例。

时间

如果您真的只关心日期而没有任何时间,请使用 LocalDate 类。如果你关心时间,比如关心某些时区的一天从什么时候开始,那么使用DateTime类并调用withTimeAtStartOfDay()方法。

示例代码

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;

String string = "2011-02-03";
LocalDate localDate = new LocalDate( string );
LocalDate sevenDaysAgo = LocalDate.now().minusDays( 7 );
boolean isThatDateMoreThanSevenDaysAgo = localDate.isBefore( sevenDaysAgo );

转储到控制台...

System.out.println( "localDate: " + localDate );
System.out.println( "sevenDaysAgo: " + sevenDaysAgo );
System.out.println( "isThatDateMoreThanSevenDaysAgo: " + isThatDateMoreThanSevenDaysAgo );

运行时……

localDate: 2011-02-03
sevenDaysAgo: 2013-12-26
isThatDateMoreThanSevenDaysAgo: true

Java 8

在 Java 8 中,您可以继续使用 Joda-Time 或切换到 JSR 310 定义的新捆绑 java.time.* classes。这些新课程的灵感来自 Joda-Time,但经过完全重新设计。

【讨论】:

【参考方案2】:
public class DateExample 

    public static void main(String[] args) 
        System.out.println(isWithin("2014-01-01", -7));
        System.out.println(isWithin("2014-01-03", -7));
        System.out.println(isWithin("2013-12-27", -7));
    

    public static boolean isWithin(String date, int days)
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date dateProvided = null;
        try 
            dateProvided = format.parse(date);
         catch (ParseException e) 
            e.printStackTrace();
         

        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_MONTH, days);
        calendar.set(Calendar.HOUR, 12);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        Date comparisonDate = calendar.getTime();

        return comparisonDate.equals(dateProvided);
    
 

【讨论】:

@tom 很高兴我能帮上忙! 如果我需要在 7 天内计算怎么办?【参考方案3】:

在转换为字符串之前,您应该对日期进行比较。

查看许多问题already posted here。

【讨论】:

我收到的日期没有任何时间标记,我需要将系统日期转换为我在该过程中收到的格式,它正在转换为字符串 日期 date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 但是在比较 sys 日期时,它会有一些时间戳,就像一些值一样,所以在比较时它会是假的?【参考方案4】:

使用 j.u.Date 很难看,因为您只对普通日期感兴趣,但这个类是一种全局时间戳。目前我会推荐 JodaTime-class org.joda.time.LocalDate 来完成这项任务。

【讨论】:

以上是关于比较Java中String类型的日期减去几天的主要内容,如果未能解决你的问题,请参考以下文章

java怎么将string类型转化为日期类型

java14-9 Doteformat的练习

java中将日期日期如何转换成另一种格式??高手!!!

java里面 date类型减去date类型怎么得到天数

java 如何取得下周一和下周日的日期

新手求教Java时间转换问题(增加天数后的日期输出)