Java 比较两个日期是否为同一天
早安,快速提问,我正在尝试比较同一时区(城市)的两个日期是否是同一天。有人知道为什么下面的代码有效,而另一个不有效,似乎无法理解为什么Java 比较两个日期是否为同一天,java,Java,早安,快速提问,我正在尝试比较同一时区(城市)的两个日期是否是同一天。有人知道为什么下面的代码有效,而另一个不有效,似乎无法理解为什么 SimpleDateFormat fmt = new SimpleDateFormat("EEE dd,MMM"); Date newparsetemp = fmt.parse(parsedate); Date currentdateparse = fmt.parse(currentdate); if(currentdateparse.equals(ne
SimpleDateFormat fmt = new SimpleDateFormat("EEE dd,MMM");
Date newparsetemp = fmt.parse(parsedate);
Date currentdateparse = fmt.parse(currentdate);
if(currentdateparse.equals(newparsetemp)){
//code executes
}
但是如果我用这个,if条件不成立
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
Date newparsetemp = fmt.parse(parsedate);
Date currentdateparse = fmt.parse(currentdate);
if(currentdateparse.equals(newparsetemp)){
//does not
}
如果您的意思是“仅比较星期几”,您是否尝试过比较Calendar.get(Calendar.day\u of u week)的结果?格式化后比较字符串是一件奇怪的事情。请尝试以下方法:
Calendar cal = GregorianCalendar.getInstance();
cal.setTime(parsedate);
Calendar cal2 = GregorianCalendar.getInstance();
cal2.setTime(currentdate);
cal2.set(Calendar.HOUR, 0);
cal2.set(Calendar.MINUTE, 0);
cal2.set(Calendar.SECOND, 0);
cal2.set(Calendar.MILLISECOND, 0);
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
System.out.println(cal.equals(cal2) ? "true" : "false");
你对时区的评论需要澄清。你是说
比较不同时区的两个日期是否为同一天
您是否同意,在同一月份和同一天,不同年份的两个不同日期有可能匹配一周中的同一天 而且不可能有两个不同的日期匹配同一天、月和年?考虑使用
最好跳过
Date
,改用LocalDate
。不久前,我在一个安卓应用程序中就这样做了
public boolean isSameDay(Event otherEvent) {
if(otherEvent == null) return false;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
Calendar otherEventDate = Calendar.getInstance();
otherEventDate.setTime(format.parse(otherEvent.getStartTime()));
Calendar thisEventDate = Calendar.getInstance();
thisEventDate.setTime(format.parse(getStartTime()));
return (otherEventDate.get(Calendar.DAY_OF_MONTH) == thisEventDate.get(Calendar.DAY_OF_MONTH) &&
otherEventDate.get(Calendar.DAY_OF_YEAR) == thisEventDate.get(Calendar.DAY_OF_YEAR));
} catch(ParseException e) {
System.out.println(e.toString());
e.printStackTrace();
}
return false;
}
这是我所做的代码,我只是检查这两个事件是否在同一天发生。如果您想增加一些精度,您只需自己添加。parseDate和currentDate的值是多少?是否改为使用Joda Time?对于“我在Java中遇到了这个日期/时间问题…”来说,这总是一个很好的开始。请注意,您给出的代码根本没有提到时区。。。你真的有时区吗?让我们看看一些输入和调试信息。^^关于另一个主题,在Java中处理时间/日期时,我始终建议使用第三方库,例如..@sparrow:为什么要将它们转换为字符串作为开始?停止这样做:)不必要的字符串转换是一个非常糟糕的主意。@sparrow最好的做法是创建一个简单的测试用例,使用硬编码的输入和错误的输出-在你这样做之前,人们只能猜测出哪里出了错…我不认为它实际上是在谈论一周中的某一天-我认为它是关于整个日期的。现在还不清楚。@Jon:对。然后可能是Calendar.get(Calendar.DAY\u OF_YEAR)和Calendar.get(Calendar.YEAR)我想我更愿意使用Joda Time:)
public boolean isSameDay(Event otherEvent) {
if(otherEvent == null) return false;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
Calendar otherEventDate = Calendar.getInstance();
otherEventDate.setTime(format.parse(otherEvent.getStartTime()));
Calendar thisEventDate = Calendar.getInstance();
thisEventDate.setTime(format.parse(getStartTime()));
return (otherEventDate.get(Calendar.DAY_OF_MONTH) == thisEventDate.get(Calendar.DAY_OF_MONTH) &&
otherEventDate.get(Calendar.DAY_OF_YEAR) == thisEventDate.get(Calendar.DAY_OF_YEAR));
} catch(ParseException e) {
System.out.println(e.toString());
e.printStackTrace();
}
return false;
}