如何将任何日期与当前日期进行比较,而不考虑年份

时间:2017-03-07 18:59:42

标签: java android date date-comparison

我想将日期与当前日期进行比较,而不考虑年份,我想更改每天的文字

这是我的代码

TextView textView = (TextView)findViewById(R.id.textView);

        String valid_until = "7/3";
        String valid_until1 = "8/3";
        String valid_until2 = "9/3";
        String valid_until3 = "10/3";

        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM");
        Date strDate = null;
        Date strDate1 = null;
        Date strDate2 = null;
        Date strDate3 = null;


        try {
            strDate = sdf.parse(valid_until);
            strDate1 = sdf.parse(valid_until1);
            strDate2 = sdf.parse(valid_until2);
            strDate3 = sdf.parse(valid_until3);


        } catch (ParseException e) {
            e.printStackTrace();
        }
        if (new Date() == (strDate)) {
            textView.setText("7 m");
        }
        if (new Date() == (strDate1)) {
            textView.setText("8 m");
        }
        if (new Date() == (strDate2)) {
            textView.setText("9 m");
        }
        if (new Date() == (strDate3)) {
            textView.setText("10 m");
        }

2 个答案:

答案 0 :(得分:0)

  

如何将任何日期与当前日期进行比较,而不考虑年份

一个选项,您可以使用Calendar对象。在每个上设置日期,然后简单地比较“DAY_OF_YEAR”值。

https://developer.android.com/reference/java/util/Calendar.html#DAY_OF_YEAR

答案 1 :(得分:-1)

TL;博士

MonthDay.now( ZoneId.of( "America/Montreal" ) )
        .equals( MonthDay.of( Month.JULY , 3 ) )

详细

有关详细信息,请参阅my Answer有关重复的问题。简要回顾一下......

避免使用麻烦的旧遗留类Date& SimpleDateFormat就像瘟疫一样。它们已被java.time类取代。大部分java.time已经在ThreeTenABP项目中反向移植到Android。

不要反复捕捉当前日期。如果你的代码要在午夜运行,那么随着日期的变化,你会得到不一致的结果。

java.time.MonthDay课程解决了您的问题,以及LocalDateZoneId

ZoneId z = ZoneId.of( "America/Montreal" );  // Zone in which you want the current date.
LocalDate today = LocalDate.now( z ); // Current date for your zone.
MonthDay mdCurrent = MonthDay.of( today );
MonthDay mdJulyThird = MonthDay.of( Month.JULY , 3 );
if( mdCurrent.equals( mdJulyThird) ) { … }

为了解决您的具体问题,我将制作一个Month枚举对象和循环的集合。搜索Stack Overflow以获取有关EnumSet的更多信息。

EnumSet<Month> months = EnumSet.range( Month.JULY , Month.OCTOBER );
for ( Month month : months ) {
    MonthDay md = MonthDay.of( month , 3 ) ; 
    if( md.equals( mdCurrent ) { 
        … 
        break; // Break out of the 'for' loop. No need to continue looping.
    }
}

要生成字符串,请调用MonthDay::format并传递DateTimeFormatter对象。搜索Stack Overflow以获取有关DateTimeFormatter的更多信息,包括数百个问题&amp;答案。