我需要将2个日期与第三个日期进行比较,并忽略所有日期的时间部分。
下面的代码生成一个解析异常,因为toString()方法返回类似“Wed Feb 26 00:00:00 EST 2014”的内容。
有关我如何解决此问题的任何建议?
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;
}
谢谢!
答案 0 :(得分:1)
为什么在已经拥有日期时解析字符串?
如果要将现有日期格式化为指定的格式,请改用format()方法:
String justTheDate = df.format(new Date());
然后你可以使用equals()方法比较字符串来检查匹配。
编辑 - 顺便说一句,如果Java 8是一个选项(它在周二发布!),它的新DateTime功能将完全符合您的要求:http://docs.oracle.com/javase/tutorial/datetime/
答案 1 :(得分:0)
您的例外原因是escd.getCurrentFCESDate().toString()
中的toString
提供另一种格式“MM / dd / yyyy”。
因此,请确保您的格式字符串在SimpleDateFormat(“MM / dd / yyyy”)中是正确的。
或者检查一下你是否可以直接从getCurrentFCESDate()获得年,月和日。
只需使用日历创建日期,您可以从现有日期获取年,月,日,但将小时,分钟,秒和毫秒设置为零。
结果将是Date对象:
像
这样的东西firstSent.set(Calendar.HOUR, 0);
firstSent.set(Calendar.MINUTE, 0);
firstSent.set(Calendar.SECOND, 0);
firstSent.set(Calendar.MILLISECOND, 0);
然后使用before()和after()
答案 2 :(得分:0)
最简单的方法是将日期转换为以下格式的数字:yyyyMMdd
。
之后你可以比较这些数字。
但是,请在转换为数字之前使用时区调整。
答案 3 :(得分:0)
你可以用毫秒计算时间并用简单/除法来减去时间。 通过这种方式,您可以比较2个长度,并检查一个长度是否大于另一个。
以我们今天到达不同日期的例子(从一个到另一个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 --> time 1 in millis
1395338536123 --> time 2 in millis
16149 --> time 1 / 86400000
16149 --> time 2 / 86400000 --> THE SAME