我沒有在Android SDK中發現任何類似的工作(谷歌在GWT框架中包括一個...也許可以把它拿出來)。
但是既然不是太困難,我自己寫了一個DateUtils類來做類似的工作。我喜歡Gmail中使用的友好日期格式,例如「昨天」或「2分鐘前」,而不是像13/08/2010或10:30 PM這樣的日期。
在什麼時間方面的差異我寫了下面
public static String getDifference(Date sessionStart, Date sessionEnd) {
if(sessionStart == null)
return "[corrupted]";
Calendar startDateTime = Calendar.getInstance();
startDateTime.setTime(sessionStart);
Calendar endDateTime = Calendar.getInstance();
endDateTime.setTime(sessionEnd);
long milliseconds1 = startDateTime.getTimeInMillis();
long milliseconds2 = endDateTime.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
long hours = diff/(60 * 60 * 1000);
long minutes = diff/(60 * 1000);
minutes = minutes - 60 * hours;
long seconds = diff/(1000);
if (hours > 0) {
return hours + " hours " + minutes + " minutes";
} else {
if (minutes > 0)
return minutes + " minutes";
else {
return seconds + " seconds";
}
}
}
..和這裏是根據單元測試,以驗證正確功能:
@Test
public void testGetDifference() {
// hours and minutes
Date startDate = DateUtils.createDateInstance("01.01.2010 12:00:00");
Date endDate = DateUtils.createDateInstance("01.01.2010 13:12:00");
String difference = DateUtils.getDifference(startDate, endDate);
assertNotNull(difference);
assertEquals("1 hours 12 minutes", difference);
// minutes
startDate = DateUtils.createDateInstance("01.01.2010 12:00:00");
endDate = DateUtils.createDateInstance("01.01.2010 12:02:00");
difference = DateUtils.getDifference(startDate, endDate);
assertNotNull(difference);
assertEquals("2 minutes", difference);
// seconds
startDate = DateUtils.createDateInstance("01.01.2010 12:00:00");
endDate = DateUtils.createDateInstance("01.01.2010 12:00:15");
difference = DateUtils.getDifference(startDate, endDate);
assertNotNull(difference);
assertEquals("15 seconds", difference);
difference = DateUtils.getDifference(null, endDate);
assertEquals("[corrupted]", difference);
}
您可能必須調整它有點並且還將硬編碼的字符串(「小時」,「分鐘」,......)外化以使一切易於本地化(如果這對您是個問題)。
只是作爲參考,它可能也值得看看JodaTime lib。也許他們有類似的實現,但我沒有驗證自己(還)。
感謝您!我想我必須自己破解一些東西..你的代碼是一個很好的開始,但..看起來像我必須添加天,周,月,年代碼..耶!樂趣! :p – kefs 2010-08-13 22:03:57
我最終修改並使用了以下類: http://www.technojeeves.com/joomla/index.php/free/71-difference-between-two-dates-in-java – kefs 2010-08-14 19:25:10
不錯。就像旁註一樣。寫一個單元測試,而不是一個虛擬的main()打印到控制檯。通過這種方式,您已經驗證了您的代碼是否正常工作:) – Juri 2010-08-15 12:54:19