Cha*_*ake 25 java theory calendar
我想比较两个Calendar对象,看它们是否包含相同的日期.我不关心天数以下的任何价值.
我已经实现了这个,我无法考虑它应该失败的任何情况:
private static boolean areEqualDays(Calendar c1, Calendar c2) {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
return (sdf.format(c1.getTime()).equals(sdf.format(c2.getTime())));
}
Run Code Online (Sandbox Code Playgroud)
这种方法是正确的还是我应该逐场比较c1和c2?
Dro*_*gba 56
尝试 compareTo
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.compareTo(c2);
Run Code Online (Sandbox Code Playgroud)
退货:
如果参数表示的时间等于此Calendar表示的时间,则值为0; 如果此Calendar的时间早于参数表示的时间,则小于0的值; 如果此Calendar的时间在参数表示的时间之后,则值大于0.
编辑
import org.apache.commons.lang3.time.DateUtils;
Run Code Online (Sandbox Code Playgroud)
您可以使用DateUtils.isSameDay它来检查它是否在同一天.
boolean isSameDay = DateUtils.isSameDay(c1, c2);
Run Code Online (Sandbox Code Playgroud)
2002年3月28日13:45和2002年3月28日06:01将恢复正常.2002年3月28日13:45和2002年3月12日13:45将返回虚假.
Jon*_*eet 20
我已经实现了这一点,我无法考虑它应该失败的任何情况
如果两个日历位于不同的时区,它将会失败 - 它们可能代表完全相同的毫秒,但是根据时区,该瞬间可能会落入不同的日期.
如果两个日历代表不同的日历系统,它也可能会失败 - 即使它们代表相同的"日期",如果两个日历代表那一天不同,你可以说它应该失败.
就个人而言,我强烈建议你使用Joda Time,它有一种LocalDate类型来代表一个日期 - 这将摆脱时区问题,而不是日历系统问题.如果你总能假设你使用相同的日历系统,那就没关系.
(此外,仅仅为了比较目的而执行字符串操作很难看 - 我只是calendar.get(Calendar.YEAR)直接检查等.)
Ami*_*nde 10
public boolean isSameDay(Calendar cal1, Calendar cal2) {
if (cal1 == null || cal2 == null)
return false;
return (cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA)
&& cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR)
&& cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70344 次 |
| 最近记录: |