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

时间:2014-01-02 21:12:04

标签: java date simpledateformat

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

两个日期的格式均为yyyy-mm-dd。

4 个答案:

答案 0 :(得分:3)

约达时间

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

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

解析

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

如果使用其他非标准格式,Joda-Time可以通过多种方式指定用于解析字符串的格式。在StackOverflow.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或切换到java.time.* classes定义的新捆绑JSR 310。这些新课程的灵感来自Joda-Time,但完全是重新设计的。

答案 1 :(得分:1)

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

查看许多问题already posted here

答案 2 :(得分:1)

使用j.u.Date是丑陋的,因为你只对普通日期感兴趣,但这个类是一种全局时间戳。目前,我建议JodaTime - 班级org.joda.time.LocalDate执行此任务。

答案 3 :(得分:1)

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);
    }
} 
相关问题