首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中比较字符串类型的日期减去几天

在Java中比较字符串类型的日期减去几天
EN

Stack Overflow用户
提问于 2014-01-02 21:12:03
回答 4查看 643关注 0票数 0

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

这两个日期的格式都是。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-02 21:26:37

代码语言:javascript
运行
复制
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);
    }
} 
票数 1
EN

Stack Overflow用户

发布于 2014-01-02 22:43:47

尤达-时间

尤达-时间 2.3库使这种日期时间计算更加容易.避免使用绑定的java.util.Date/Calendar类。

在本例中,Joda-Time提供了一个方便的minusDays()方法以及比较方法isBeforeisAfter

解析

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

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

一天中的时间

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

示例代码

代码语言:javascript
运行
复制
// © 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 );

转储到控制台…

代码语言:javascript
运行
复制
System.out.println( "localDate: " + localDate );
System.out.println( "sevenDaysAgo: " + sevenDaysAgo );
System.out.println( "isThatDateMoreThanSevenDaysAgo: " + isThatDateMoreThanSevenDaysAgo );

运行…时

代码语言:javascript
运行
复制
localDate: 2011-02-03
sevenDaysAgo: 2013-12-26
isThatDateMoreThanSevenDaysAgo: true

Java 8

在Java8中,您可以继续使用Joda时间,也可以切换到由定义的新绑定的JSR 310。这些新的类是受Joda-Time启发的,但完全是重新架构的。

票数 3
EN

Stack Overflow用户

发布于 2014-01-02 21:16:42

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

查看已经贴在这里了的许多问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20891969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档