无法比较日期
Trouble comparing dates
如果给定的日期是今天或明天,我应该打印一条消息的以下代码有问题:
if (dayOfMonth >= Calendar.DAY_OF_MONTH){
System.out.printl("Is today or tomorrow");
}
如果 dayOfMonth
大于或等于今天的日期,则打印消息。但是,条件总是 returns false。我发现 Calendar.DAY_OF_MONTH
returns 5,但我不知道为什么。
今天是 14-03-2015,所以 dayOfMonth
应该是 14。
Calendar.DAY_OF_MONTH
不代表一个月中的第几天,它是一个常量值,用于 检索 一个月中的第几天 :
Calendar calendar = Calendar.getInstance();
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
顺便说一句,当明天是下个月的第一天时,您检查日期是今天还是明天的代码不起作用(因为 calendar.get(Calendar.DAY_OF_MONTH)
将 return 1)。您还需要当前月份来确定给定日期是同一天还是第二天。
Calendar calendar = Calendar.getInstance();
if (month == calendar.get(Calendar.MONTH) &&
dayOfMonth == calendar.get(Calendar.DAY_OF_MONTH)) {
//day is today
} else {
calendar.add(Calendar.DAY_OF_MONTH, 1);
if (month + 1 == calendar.get(Calendar.MONTH) && dayOfMonth == 1 ||
month == calendar.get(Calendar.MONTH) && dayOfMonth + 1 == calendar.get(Calendar.DAY_OF_MONTH)) {
//day is tomorrow
}
}
使用 Java 8,这可以简化为(其中 myDate
是 LocalDate
)
LocalDate tomorrow = LocalDate.now().addDays(1);
if (Duration.between(myDate.atTime(0, 0), tomorrow.atTime(0, 0)).toDays() <= 1) {
//is today or tomorrow
}
Calendar.DAY_OF_MONTH
是您可以在 [=16] 中使用的众多 calendar fields(Calendar.YEAR
、Calendar.WEEK_OF_YEAR
、Calendar.DAY_OF_WEEK_IN_MONTH
等)之一=] 和 Calendar.get()
方法。
Calendar.DAY_OF_MONTH
等于 5 的原因是因为它只是在 java.util.Calendar
class 的实现中内部使用的整数来表示 DAY_OF_MONTH
字段.该整数的值实际上对用户并不重要。
有兴趣的其实可以自己去看看source code:
/**
* Field number for <code>get</code> and <code>set</code> indicating the
* day of the month. This is a synonym for <code>DATE</code>.
* The first day of the month has value 1.
*
* @see #DATE
*/
public final static int DAY_OF_MONTH = 5;
在你的情况下,你想要做类似
的事情
Calendar myCal = Calendar.getInstance();
int dayOfMonth = myCal.get(Calendar.DAY_OF_MONTH);
获取您感兴趣的月中实际日期值。
有关详细信息,请参阅 java.util.Calendar 的文档 here。
如果给定的日期是今天或明天,我应该打印一条消息的以下代码有问题:
if (dayOfMonth >= Calendar.DAY_OF_MONTH){
System.out.printl("Is today or tomorrow");
}
如果 dayOfMonth
大于或等于今天的日期,则打印消息。但是,条件总是 returns false。我发现 Calendar.DAY_OF_MONTH
returns 5,但我不知道为什么。
今天是 14-03-2015,所以 dayOfMonth
应该是 14。
Calendar.DAY_OF_MONTH
不代表一个月中的第几天,它是一个常量值,用于 检索 一个月中的第几天 :
Calendar calendar = Calendar.getInstance();
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
顺便说一句,当明天是下个月的第一天时,您检查日期是今天还是明天的代码不起作用(因为 calendar.get(Calendar.DAY_OF_MONTH)
将 return 1)。您还需要当前月份来确定给定日期是同一天还是第二天。
Calendar calendar = Calendar.getInstance();
if (month == calendar.get(Calendar.MONTH) &&
dayOfMonth == calendar.get(Calendar.DAY_OF_MONTH)) {
//day is today
} else {
calendar.add(Calendar.DAY_OF_MONTH, 1);
if (month + 1 == calendar.get(Calendar.MONTH) && dayOfMonth == 1 ||
month == calendar.get(Calendar.MONTH) && dayOfMonth + 1 == calendar.get(Calendar.DAY_OF_MONTH)) {
//day is tomorrow
}
}
使用 Java 8,这可以简化为(其中 myDate
是 LocalDate
)
LocalDate tomorrow = LocalDate.now().addDays(1);
if (Duration.between(myDate.atTime(0, 0), tomorrow.atTime(0, 0)).toDays() <= 1) {
//is today or tomorrow
}
Calendar.DAY_OF_MONTH
是您可以在 [=16] 中使用的众多 calendar fields(Calendar.YEAR
、Calendar.WEEK_OF_YEAR
、Calendar.DAY_OF_WEEK_IN_MONTH
等)之一=] 和 Calendar.get()
方法。
Calendar.DAY_OF_MONTH
等于 5 的原因是因为它只是在 java.util.Calendar
class 的实现中内部使用的整数来表示 DAY_OF_MONTH
字段.该整数的值实际上对用户并不重要。
有兴趣的其实可以自己去看看source code:
/**
* Field number for <code>get</code> and <code>set</code> indicating the
* day of the month. This is a synonym for <code>DATE</code>.
* The first day of the month has value 1.
*
* @see #DATE
*/
public final static int DAY_OF_MONTH = 5;
在你的情况下,你想要做类似
的事情Calendar myCal = Calendar.getInstance();
int dayOfMonth = myCal.get(Calendar.DAY_OF_MONTH);
获取您感兴趣的月中实际日期值。
有关详细信息,请参阅 java.util.Calendar 的文档 here。