我只想找到日期参数是当前日期(yyyy-MM-dd)而不使用simpledateformater或任何日期来字符串转换然后找到等于。
specifiedDate=2012-12-20
currentDate=2012-12-21
specifiedDate == currentDate
很简单我不想在验证时不包括时间(即HH:mm:S)
我尝试了类似
的内容public boolean isCurrentDate(Calendar date){
Calendar currentDate = Calendar.getInstance().getTime();
if (currentDate.getDate()==(date.getTime().getDate())
&& currentDate.getMonth()==(date.getTime().getMonth())
&& currentDate.getYear()==(date.getTime().getYear()) )
{
return true;
}
return false;
}
请建议一个更好的方法,或者是否有任何图书馆可用于此!!
答案 0 :(得分:2)
如果您只想
,请尝试此操作1)使用字符串
String s1 = new String("2012-01-27");
String s2 = new String("2011-01-28");
System.out.println(s1.compareTo(s2));
如果s1在词典方式上比s2“更大”,结果将为TRUE,这就是你需要的。要获得更多信息,请阅读compareTo()方法的javadoc。
2)使用Joda时间
使用Joda Time lib可以实现如下
DateTime first = ...;
DateTime second = ...;
LocalDate firstDate = first.toLocalDate();
LocalDate secondDate = second.toLocalDate();
return firstDate.compareTo(secondDate);
我更喜欢第二个选项
答案 1 :(得分:2)
比较之前将时间字段设置为0
currentDate.set(Calendar.HOUR_OF_DAY, 0);
currentDate.set(Calendar.MINUTE, 0);
currentDate.set(Calendar.SECOND, 0);
currentDate.set(Calendar.MILLISECOND, 0);
答案 2 :(得分:1)
您的上一行&& currentDate.getYear()==(date.getMonth()) )
似乎是在比较年份和月份,而不是年份和年份。这可能是你的问题吗?
答案 3 :(得分:1)
如果您使用的是日历
public static boolean isSameDay(Calendar cal1, Calendar cal2) {
if (cal1 == null || cal2 == null) {
throw new IllegalArgumentException("The dates must not be null");
}
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));
}
public static boolean isToday(Calendar cal) {
return isSameDay(cal, Calendar.getInstance());
}
如果您使用日期
public static boolean isSameDay(Date date1, Date date2) {
if (date1 == null || date2 == null) {
throw new IllegalArgumentException("The dates must not be null");
}
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
return isSameDay(cal1, cal2);
}
public static boolean isToday(Date date) {
return isSameDay(date, Calendar.getInstance().getTime());
}
答案 4 :(得分:1)
试试这个:
currentDate.set(Calendar.DATE, 0);
答案 5 :(得分:0)
您问题中的示例代码忽略了时区的关键问题。日期,即一天的开始和结束点,由时区定义。
java.util.Calendar和java.util.Date都没有分配时区。它们代表UTC / GMT的日期和时间。
因此,您需要应用与您的应用环境相关的所需时区。数据。这意味着你需要一个体面的日期时间库。除了java.util.Date/Calendar,java.text.SimpleDateFormat和他们的兄弟类之外的其他东西,因为它们是众所周知的麻烦。使用Joda-Time或与Java 8捆绑在一起的新java.time.* package(受Joda-Time启发,由JSR 310定义)。
请注意方法withTimeAtStartOfDay
的使用。这是当天的第一时刻。这通常是00:00:00但不总是。夏令时(DST)或其他异常可能会产生不同的时间。该方法巧妙地处理了这些问题。
从技术上讲,使用日期时间值时,特定的“日期”实际上是一段时间。定义该跨度的最常见且通常有用的方式是“半开”,其中开头是包含的,结尾是独占的。这意味着,对于当前日期,我们希望今天(包括)的第一时刻到明天的第一时刻(独家)。然后我们询问目标日期时间是否在该范围内。
还有其他方法可以完成这项工作。我正在展示这种方法,因为它适用于超出“今天”问题的情况。
Joda-Time提供三个类来定义时间跨度:Interval,句点和持续时间。
设置我们的输入数据,一个Calendar对象。
// Create a Calendar object to simulate input.
java.util.Date date = DateTime.now().minusDays( 3 ).toDate();
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.setTime( date );
将“今天”定义为一段时间,并查看目标日期时间是否在该范围内。
DateTimeZone timeZone = DateTimeZone.forID( "Asia/Kolkata" );
DateTime dateTimeInQuestion = new DateTime( cal.getTimeInMillis(), timeZone );
DateTime now = new DateTime( timeZone );
Interval today = new Interval( now.withTimeAtStartOfDay(), now.plusDays( 1 ).withTimeAtStartOfDay() );
boolean isDateTimeInQuestionInInterval = today.contains( dateTimeInQuestion );
转储到控制台...
System.out.println( "cal: " + cal.getTime() );
System.out.println( "dateTimeInQuestion: " + dateTimeInQuestion );
System.out.println( "now: " + now );
System.out.println( "today: " + today );
System.out.println( "isDateTimeInQuestionInInterval: " + isDateTimeInQuestionInInterval );
跑步时......
cal: Wed Feb 12 22:46:04 PST 2014
dateTimeInQuestion: 2014-02-13T12:16:04.369+05:30
now: 2014-02-16T12:16:04.497+05:30
today: 2014-02-16T00:00:00.000+05:30/2014-02-17T00:00:00.000+05:30
isDateTimeInQuestionInInterval: false