我有一个Identity
类,带有必要的访问器和mutator。
在单独的程序中,我将身份日期与今天的日期进行比较,该日期始终返回<= 10
。然而,当我去打印时,无论日期是什么,我都得到相同的结果。是否有不同的方式来访问正确的日期?
我需要获得两个日期之间的天数,而我在格式化方面遇到了麻烦:
Date today = new Date();
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
Date a = df.parse("06/18/2015");
Date b = df.parse("01/04/2015");
Date c = df.parse("02/04/2015");
Date d = df.parse("03/04/2015");
Date e = df.parse("07/04/2015");
if(a.compareTo(today) == 30{
//do stuff
}
我尝试了多种方法无济于事。
答案 0 :(得分:1)
您的代码中有两个错误:
compareTo()
仅在日期相同时返回0,如果日期在参数之后则返回正值,如果在之前,则返回负值。它不会返回两个日期之间的差异。为了得到差异你可以写:
today.getTime() - expiration.getTime()
获取两个日期之间的毫秒数,然后将其与以毫秒为单位转换的10天进行比较。
您没有正确初始化日期:Date a = new Date(06/18/2015);
无法正常工作。
它应该创建一个以毫秒为参数的新Date。因此,您的代码将按6除以18,到2015年获得数毫秒...您可以使用:
Date a = new GregorianCalendar(2015, 06, 18).getTime();
今天有一种更简单的方法:Date today = new Date();
答案 1 :(得分:0)
您正在执行整数除法,而不是调用您认为的Date
构造函数。
Date a = new Date(06/18/2015);
使用DateFormat
之类的
public static void main(String[] args) {
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
try {
Date a = df.parse("06/18/2015");
System.out.println("1. " + a);
System.out.println("2. " + df.format(a));
} catch (ParseException e) {
e.printStackTrace();
}
}
注意 Date
是即时的,因此它的默认文字表示可能与您的预期不同。请参阅下面第1行和第2行的差异,
1. Thu Jun 18 00:00:00 EDT 2015
2. 06/18/2015
最后,您需要计算difference between two dates。 compareTo
会告诉你更小或更大,而不是规模。
答案 2 :(得分:0)
我创建了一个接收两个日期的方法,转换它们并返回一个工作正常的long
。 86400000是一天中的毫秒数。我使用GregorianCalendar
格式
public long compareDates(Date exp, Date today){
return (exp.getTime()-today.getTime())/86400000;
}