Java 如何获得两个日期在天数、小时数、分钟数和秒数上的差异

Java 如何获得两个日期在天数、小时数、分钟数和秒数上的差异,java,jodatime,Java,Jodatime,我想获得两个给定日期之间的天数、小时数和分钟数,到目前为止,我已尝试了三种不同的方法,但没有一种方法给出正确的值。请让我知道如何获得两个给定日期之间的天数、小时数和分钟数 在所有方面,输入日期均为2015年2月21日星期六12:00:00 IST 第一路 Date estDate=//date object which returns Sat Feb 21 12:00:00 IST 2015 long estDateInLong=estDate.getTime(); long curre

我想获得两个给定日期之间的天数、小时数和分钟数,到目前为止,我已尝试了三种不同的方法,但没有一种方法给出正确的值。请让我知道如何获得两个给定日期之间的天数、小时数和分钟数

在所有方面,输入日期均为2015年2月21日星期六12:00:00 IST 第一路

Date estDate=//date object which returns Sat Feb 21 12:00:00 IST 2015
long estDateInLong=estDate.getTime();
    long currentTimeinLong=Calendar.getInstance().getTimeInMillis();
    Long diff=currentTimeinLong-estDateInLong;
    long diffSeconds = diff / 1000 % 60;  //gives 6
    long diffMinutes = diff / (60 * 1000) % 60; //gives 21
    long diffHours=diff/(60*60 * 1000) % 60;//gives 26
    long diffDay=diff/(24*60*60 * 1000) % 60;//gives 16
这是错误的,所以我再次尝试以下方法

Period p=new Period(new LocalDate(estDate)), new LocalDate(currentDate);
System.out.println(p.getDays());System.out.println(p.getHours());System.out.println(p.getMinutes());
输出

2
0
0
第三条路

int delayTimeInDays=Days.daysBetween(new LocalDate(estDate), new LocalDate(currentDate).getDays();
    int delayTimeinHours=Hours.hoursBetween(new LocalDate(estDate), new LocalDate(currentDate).getHours();
    int seconds=Seconds.secondsBetween(new LocalDate(estDate), new LocalDate(currentDate)).getSeconds();
这给了我163841382400

这又错了

预期产出

2
0
0
当前时间是3月9日下午2:48

2015年2月21日中午12点至2月22日中午12点:1天

2015年2月22日中午12点至2月23日中午12点:2天

所以到今天中午12点的天数=16天

小时数=2


分钟数=50

如果我答对了你的问题,这就是你要找的

long estDateInLong=//whatever gives you past date
long currentTimeinLong=Calendar.getInstance().getTimeInMillis();
long diff=(long)(currentTimeinLong-estDateInLong);
long diffDay=diff/(24*60*60 * 1000);
diff=diff-(diffDay*24*60*60 * 1000); //will give you remaining milli seconds relating to hours,minutes and seconds
long diffHours=diff/(60*60 * 1000);
diff=diff-(diffHours*60*60 * 1000); 
long diffMinutes = diff / (60 * 1000);
diff=diff-(diffMinutes*60*1000);
long diffSeconds = diff / 1000;
diff=diff-(diffSeconds*1000);       
System.out.println(diffDay +"\t"+diffHours+"\t"+diffMinutes+"\t"+diffSeconds);
使用Joda(可能是!)可能很容易做到,但也可以这样做

希望这有帮助!
祝你好运

如果你的源值是
LocalDate
值,你为什么会有天以外的值?您预计小时和分钟数何时为非零?你的问题现在不是很清楚。。。(也不清楚为什么你把某个东西叫做
estDate
,而它只是一个java.util.Date,因此没有时区…@JonSkeet我想得到两个日期之间的天数、小时数和分钟数。我的意思是我想计算天数,从2015年2月21日星期六12:00:00到今天的几小时和几分钟。希望你能理解Localdate只是一个没有时间的日期。哦,你是说三个完全独立的值?你说的是日期,还是日期/时间值?因为“2015年2月21日星期六12:00:00 IST”是一个特定的时间点,而不仅仅是一个日期。如果你问的是“2015年2月21日”和“2015年3月9日”之间的差异,那就是两个日期之间的差异。一旦你得到了天数的差值,你可以乘以24得到小时,或者乘以24*60得到分钟。。。当然,这不会考虑任何时区的变化。@JonSkeet他想要“天数、小时数和分钟数”,所以是的,我想他想要日期/时间。这正是我想要的,谢谢。但我不明白为什么每个时段都不一样,因为当你从总毫秒数中删除天数时,现在,当
diff
变量仅包含小时值的毫秒数时,您需要比这一天多的小时数