如何在Java中使用日期执行算术运算?

5

可能是重复问题:
如何在Java中计算时间差?

实际上,我想在Java中减去两个日期。我尝试了很多次,但都没有成功。所以请有人帮帮我。

Date dtStartDate=pCycMan.getStartDate();

Date dtEndDate=pCycMan.getEndDate();

我该如何减去这两个日期?

你希望输出什么? - Amir Raminfar
8个回答

6
你可以这样获取以毫秒为单位的时间差:
dtEndDate.getTime() - dtStartDate.getTime()

(getTime 返回自1970年1月1日00:00:00 GMT以来的毫秒数。) 但是,对于这种类型的日期计算,Joda时间库可能是更好的选择,它具有适用于时间持续时间(Duration)的正确类。

我说使用.getTime,但对于joda来说+1。 - RMT

6
long msDiff = dtEndDate.getTime() - dtStartDate.getTime()

msDiff现在保存了两个日期之间的毫秒差异。可以使用除法和模运算符将其转换为其他单位。


正如其他人所指出的那样,对于比这更复杂的任何事情,Joda Time绝对是最佳选择。 - Mike Deck
但我希望结果像20-jun-2011 - 1-june-2011=28。 - AndroidDev
@Anshuman,我不知道6月20日减去6月1日怎么会等于28。你要找什么单位?在我看来,它应该等于19天。要获取天数,只需使用我的答案中的代码,然后执行msDiff /(1000 * 60 * 60 * 24)即可。 - Mike Deck
嗨,Mike,我已经这样做了,但结果是负数: long lDiffFromToday = currentDate.getTime()-dtSelDate.getTime();lDiffFromToday=lDiffFromToday/(1000 * 60 * 60 * 24); - AndroidDev

1

要计算两个日期之间的差值,您可以将它们都转换为长整型 getTime() 并相减返回的值。


0

使用日历类。

用法:

Calendar c = Calendar.getInstance();
c.setTime(dtStartDate);
int date = c.get(Calendar.YEAR); //int represents the year of the date
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK); // int represents dayOfWeek as defined in link.

0
创建两个日历对象,从这些日期中使用add()方法(也可以用于减去日期)。

你能否给我举几个例子展示一下? - AndroidDev

0

似乎对于简单的数学运算来说有点过度了。 - Woot4Moo
你需要类似这样的东西 http://joda-time.sourceforge.net/api-release/org/joda/time/Days.html#minus(org.joda.time.Days) 吗? - rascio

0
long diffInMillis = dtEndDate.getTimeInMillis() -  dtStartDate.getTimeInMillis();

0

这要看你想要什么。如果要获取毫秒差异,请使用dtStartDate.getTime() - dtEndDate.getTime()

如果要获取天数、小时数等差异,请使用Calendar类(例如after、before、compareTo、roll等方法)。


实际上我想要结果以天为单位,那该怎么做呢? - AndroidDev
作为日期之间的差异?还是以时间单位来衡量?如果是后者,你只需除以 24*60*60*1000.0 - aioobe
你能否给我提供一些例子帮助我吗? - AndroidDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接