我想将日期与当前日期进行比较,而不考虑年份,我想更改每天的文字
这是我的代码
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");
}
答案 0 :(得分:0)
如何将任何日期与当前日期进行比较,而不考虑年份
一个选项,您可以使用Calendar对象。在每个上设置日期,然后简单地比较“DAY_OF_YEAR”值。
https://developer.android.com/reference/java/util/Calendar.html#DAY_OF_YEAR
答案 1 :(得分:-1)
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
课程解决了您的问题,以及LocalDate
和ZoneId
。
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;答案。