好我的问题: 我有两个JSpinner,显示当前的小时和分钟。 它们看起来像那样:
Date date = new Date();
SpinnerDateModel sm = new SpinnerDateModel(date, null, null, Calendar.HOUR_OF_DAY);
TimeBeginSpinner = new javax.swing.JSpinner(sm);
JSpinner.DateEditor de = new JSpinner.DateEditor(TimeBeginSpinner, "HH:mm");
TimeBeginSpinner.setEditor(de);
现在回答我的问题。我试图计算这两个时间段之间的差异。但这似乎并不总是奏效。
我尝试了两个不同的版本,没有外部库和JodaTime。
没有lib,我就这样计算:
long diff = dateEnd.getTime() - dateBegin.getTime();
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = 24 + diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000) + 16753;
dateEnd和dateBegin是我从JSpinner收到的日期。
使用JodaTime,我尝试了这样:
Duration duration = new Duration(dateBegin.getTime(), dateEnd.getTime());
System.out.println("JodaTime Days: " + duration.getStandardDays());
System.out.println("JodaTime Hours: " + duration.getStandardHours());
System.out.println("JodaTime Minutes: " + duration.getStandardMinutes());
现在出现了问题: 如果我在不触及JSpinner的情况下计算差异,它似乎有效。 这是我的日志:
JodaTime Days: 0
JodaTime Hours: 0
JodaTime Minutes: 0
calcTimeDiff: ---------------------------
getTime Begin: 1447617955831
getTime End: 1447617955831
diffDays: 0
diffHours: 0
diffMinutes: 0
一旦我触摸第二个JSpinner并想检查它是否正确计算1小时差异,出现问题...... 在这里我的日志:JSpinner1仍未触及,JSpinner2在一小时后设置。
JodaTime Days: -16753
JodaTime Hours: -402095
JodaTime Minutes: -24125700
calcTimeDiff: ---------------------------
getTime Begin: 1447617955831
getTime End: 75900000
diffDays: -16753
diffHours: 1
diffMinutes: 0
将JSpinner1缩短1小时,应相差2小时。
日志:
JodaTime Days: 0
JodaTime Hours: 2
JodaTime Minutes: 120
calcTimeDiff: ---------------------------
getTime Begin: 69060000
getTime End: 76260000
diffDays: 0
diffHours: 26
diffMinutes: 0
有谁知道这里出了什么问题?
感谢您的帮助!