Java 只比较日期(而不是时间)
我需要将两个日期与第三个日期进行比较,忽略所有日期的时间部分 下面的代码生成一个解析异常,因为toString()方法返回类似“Wed Feb 26 00:00:00 EST 2014”的内容 有没有关于如何解决这个问题的建议Java 只比较日期(而不是时间),java,Java,我需要将两个日期与第三个日期进行比较,忽略所有日期的时间部分 下面的代码生成一个解析异常,因为toString()方法返回类似“Wed Feb 26 00:00:00 EST 2014”的内容 有没有关于如何解决这个问题的建议 private boolean needToSendEmail(EmSelfCertEntity escd) throws ParseException { boolean sendEmail = false; DateFormat df
private boolean needToSendEmail(EmSelfCertEntity escd) throws ParseException {
boolean sendEmail = false;
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
Date justTheDate = df.parse(escd.getCurrentFCESDate().toString());
Calendar firstSent = Calendar.getInstance();
firstSent.setTime(justTheDate);
justTheDate = df.parse(new Date().toString());
Calendar firstFollowUp = Calendar.getInstance();
firstFollowUp.setTime(justTheDate);
firstFollowUp.add(Calendar.DATE, -daysToFirstFollowUpEmail);
Calendar secondFollowUp = Calendar.getInstance();
secondFollowUp.setTime(justTheDate);
secondFollowUp.add(Calendar.DATE, -daysToSecondFollowUpEmail);
if ((firstSent.before(firstFollowUp) && escd.countEmailsSent <= 1)
|| (firstSent.before(secondFollowUp) && escd.countEmailsSent <= 2)) {
sendEmail = true;
}
return sendEmail;
}
private boolean needToSendEmail(EmSelfCertEntity escd)引发异常{
布尔sendmail=false;
DateFormat df=新的简化格式(“MM/dd/yyyy”);
datejustTheDate=df.parse(escd.getCurrentFCESDate().toString());
Calendar firstSent=Calendar.getInstance();
第一次发送。设置时间(调整日期);
justTheDate=df.parse(new Date().toString());
Calendar firstFollowUp=Calendar.getInstance();
第一次随访。设定时间(JustheDate);
添加(Calendar.DATE,-daysToFirstFollowUpEmail);
Calendar secondFollowUp=Calendar.getInstance();
第二次随访。设定时间(正午);
添加(Calendar.DATE,-daysToSecondFollowUpEmail);
if((firstSent.before(firstFollowUp))和&escd.countEmailsSent既然已经有了日期,为什么还要解析字符串
如果要将现有日期格式化为指定的格式,请改用format()方法:
String justTheDate = df.format(new Date());
然后可以使用equals()方法比较字符串以检查匹配
编辑-顺便说一句,如果Java 8是一个选项(它在周二推出!),它的新DateTime功能将完全满足您的要求:出现异常的原因是toString inescd.getCurrentFCESDate().toString()
提供“MM/dd/yyyy”以外的其他格式。
因此,请确保SimpleDataFormat(“MM/dd/yyyy”)行中的格式字符串是正确的。
或者检查是否可以直接从getCurrentFCESDate()获取年、月和日
只需使用日历创建一个日期,从现有日期开始计算年、月、日,但将小时、分钟、秒和毫秒设置为零。
结果将是一个日期对象:
差不多
firstSent.set(Calendar.HOUR, 0);
firstSent.set(Calendar.MINUTE, 0);
firstSent.set(Calendar.SECOND, 0);
firstSent.set(Calendar.MILLISECOND, 0);
然后使用before()和after()最简单的方法是将日期转换为以下格式的数字:yyyyMMdd
然后你就可以比较这些数字了
但是,是的,请在转换为数字之前进行时区调整。您可以以毫秒为单位计算时间,并用简单的/除法减去时间。
通过这种方式,您可以比较两个长,并检查一个是否比另一个大
以今天的不同日期为例(从一个到另一个的时间间隔为500毫秒),但如果除以86400000,则得到相同的数字
试试这个:
public static void main(String[] args) throws Exception {
Date d1= new Date();
Thread.sleep(500);
Date d2= new Date();
final int MILLISECONDS = 1000;
final int SECONDS = 60;
final int MINUTES = 60;
final int HOURS = 24;
final long MILLI_PER_DAY= MILLISECONDS*SECONDS*MINUTES*HOURS;
System.out.println(MILLI_PER_DAY);
System.out.println(d1.getTime());
System.out.println(d2.getTime());
System.out.println(d1.getTime()/MILLI_PER_DAY);
System.out.println(d2.getTime()/MILLI_PER_DAY);
}
您将看到最后两个条目是相同的:
1395338535623-->时间1(毫秒)
1395338536123-->时间2(毫秒)
16149-->时间1/86400000
16149-->时间2/86400000-->相同的
这里根本不清楚您的输入是什么…或者您感兴趣的时区。请记住,日期
只是时间上的一个瞬间;它可能发生在世界各地的不同日子。如果您可以使用Joda time(或Java 8)这也会让您的生活更轻松。getCurrentFCESDate返回什么?Wich class?使用equals,您无法对前后进行比较。通常情况下,日期需要前后比较或<或>比较。我没有看到前后比较,但如果从字符串转换回日期,而没有任何与之相关的时间信息,那就很简单了。