我必须计算日期之间的差异,我找到了一种方法,但我有这个奇怪的结果,我错过了什么?
public static void main(String[] args) throws ParseException {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
long result = format.parse("2012-03-25 24:00").getTime() - format.parse("2012-03-25 00:00").getTime();
System.out.println("Difference in hours: " + result/(1000*60*60));
result = format.parse("2012-03-26 24:00").getTime() - format.parse("2012-03-26 00:00").getTime();
System.out.println("Difference in hours: " + result/(1000*60*60));
}
这是结果: 小时差异:23 小时差异:24
感谢您的建议,现在我正在使用Joda libray,我有这个问题,当我用这种方式计算差异时:
DateTime begin = new DateTime("2012-03-25T00:00+01:00");
DateTime end = new DateTime("2012-03-26T00:00+01:00");
Hours m = Hours.hoursBetween(begin, end);
如果我用这种方式来计算我24小时得到的小时数(因为我认为不考虑DST)
考虑到DST(我已经尝试了不同的方法,但我没有得到它),我应该使用什么类/微积分才能得到23小时的Period类?
感谢所有帮助...
答案 0 :(得分:11)
您可能碰巧选择了在该时区内夏令时发生变化的日期,因此这一天的确可能只有23个小时。 (2012年3月25日肯定是欧洲的DST更改日期,例如Europe/London。我们不知道您的默认时区是什么。)
如果您将日期格式设置为使用UTC,则不应看到此效果。 (请注意,在字符串表示中使用24:00有点奇怪。)不清楚您的数据意味着代表什么,或者您要测量的是什么。如果你想知道在当地时间之间实际经过了多长时间,你应该计算出你的数据真正意义上的时区。
(如另一个答案中所述,Joda Time一般来说是一个更好的API - 但你仍然需要知道如何正确使用它,并且在尝试计算出实际经过的时间时,你仍然会在这里看到了相同的结果。)
答案 1 :(得分:-1)
必须放置库文件,如下所述。
import java.util.Date;
String dateStart = dateChooserCombo1.getText();
String dateStop =dateChooserCombo2.getText();
//HH converts hour in 24 hours format (0-23), day calculation
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
Date d1 = null;
Date d2 = null;
try {
d1 = format.parse(dateStart);
d2 = format.parse(dateStop);
//in milliseconds
long diff = d2.getTime() - d1.getTime();
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);
//System.out.print(diffDays + " days, ");
jTextField3.setText(""+diffDays);
} catch (Exception e) {
e.printStackTrace();
}