[英]Comparing Just the Date (not time)
我需要将2个日期与第三个日期进行比较,并忽略所有日期的时间部分。
下面的代码生成一个解析异常,因为toString()方法返回的内容类似于“ EST 2014年2月26日星期三00:00:00”。
关于如何解决此问题的任何建议?
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;
}
谢谢!
为什么已经有日期时为什么要解析字符串?
如果要将现有的Date格式化为指定的格式,请改用format()方法:
String justTheDate = df.format(new Date());
然后,您可以使用equals()方法比较字符串以检查是否匹配。
编辑-顺便说一下,如果可以选择使用Java 8(星期二发布!),它的新DateTime功能将完全满足您的需求: http : //docs.oracle.com/javase/tutorial/datetime /
导致您异常的原因是, escd.getCurrentFCESDate().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()
最简单的方法是将日期转换为以下格式的数字: yyyyMMdd
。
之后,您可以比较数字。
但是,是的,请先进行时区调整,然后再转换为数字。
您可以以毫秒为单位计算时间,并用简单的/除法来减去时间。 这样,您可以比较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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.