比较今天的日期+ 30天至另一个日期
我想要一个例子:比较今天的日期+ 30天至另一个日期
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
String date = "03/09/2010"; //30 days from today
Date usefullDate = df.parse(date);
Calendar todaysDatePlus30Days = Calendar.getInstance();
todaysDatePlus30Days.add(Calendar.DAY_OF_YEAR, 30);
System.out.println ("Compared Value: " +
usefullDate.compareTo(todaysDatePlus30Days.getTime()))
打印的值是-1
。为什么它不打印0
?
我认为问题在于todaysDatePlus30Days.getTime()
也带来了实际的时间。而usefullDate
的时间为00:00:00
。
所以下一个问题是我怎么才能得到date
?
您解析的日期隐含在该日期的午夜。你构建的那个将是一天中的当前时间。
尝试:
Calendar todayPlus30 = new GregorianCalendar() {{
add(Calendar.DAY_OF_YEAR, 30);
set(Calendar.HOUR_OF_DAY, 0);
set(Calendar.MINUTE, 0);
set(Calendar.SECOND, 0);
set(Calendar.MILLISECOND, 0);
}};
我可能有一对夫妇的常量错了,你可以用Calendar.newInstance做到这一点(),如果你喜欢,尽管语法有一点不同。
你的目标是正确的,但你不能继承这样的返回值。你将不得不保留一个引用并在该引用上调用这些集合,或者使用'new GregorianCalendar(){{' – Yishai 2010-02-07 18:34:08
正确。我必须在'todayPlus30'对象上调用套件 – Omnipresent 2010-02-07 18:35:46
哦,对不起;我总是使用GregorianCalendar,而我只是输入机器人模式:-) – Pointy 2010-02-07 18:38:57
当你System.out.println(..)
他们,结果是:
Tue Mar 09 00:00:00 EET 2010
Tue Mar 09 20:31:39 EET 2010
所以他们是不相等的 - 他们的小时不同。这是因为Calendar.getInstance()
返回当前日期和时间。
如果你想他们是平等的,你必须set(..)
的小时,分钟和秒字段为0
如果添加以下行你的榜样,你会学到有用日期有不同的时间
System.out.println ("" + usefullDate);
System.out.println ("" + todaysDatePlus30Days.getTime());
我建议使用JodaTime,但如果您使用长日期/时间,你可以做...
long todaysDay = System.currentTimeMillis()/MILLIS_PER_DAY;
long in30days = todaysDay + 30;
long usefulDay = usefulDate.getTime()/MILLIS_PER_DAY;
if (in30days == usefulDay) // days are the same.
注:执行计算为每克MT + 0时区。这可以有所作为。
请参阅下面的答案。 – Pointy 2010-02-07 18:33:01