我没有在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