Я не нашел ничего в Android SDK, который бы выполнял аналогичную работу (Google включил один в платформу GWT ... возможно, его можно было бы там взять).
Но так как это не так уж сложно, я сам написал класс DateUtils, который выполняет аналогичную работу. Мне нравятся удобные форматы дат, которые также используются в Gmail, например, «Вчера» или «2 минуты назад», а не даты, такие как 13.08.2010 или 22:30.
Что касается разницы во времени, я написал следующее
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. Возможно, у них похожая реализация, но я сам не проверял (пока).