我有一个按日期排序的数据库,在我的输出中,我想显示行之间经过的时间..像这样..
| 条目#1于08/10/2010 08:34 AM
| 条目#2于08/10/2010 09:45 AM | 自上次入境以来1小时11分钟
| 2010年11月8日上午06:57进入#3 自上次入境以来1天3小时12分钟
| 条目#4于08/11/2010 08:34 PM | 自上次入境以来13小时37小时
| 条目#5于09/11/2011 08:48 PM | 自上次入境以来1年1个月8分钟
我看过getRelativeTimeSpanString()但是1)它从现在开始计算&2)它附加了一个前缀/后缀.
有没有更简单的方法来做到这一点,除了创建一个自定义的约会方法,并将自己的所有条件与条件一起切割?
提前致谢.
我没有在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";
}
}
}
Run Code Online (Sandbox Code Playgroud)
..这里是相应的单元测试来验证正确的功能:
@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);
}
Run Code Online (Sandbox Code Playgroud)
您可能需要稍微调整一下并将硬编码字符串外部化("小时","分钟",......),以便更容易本地化(如果这对您来说是个问题).
作为参考,它可能也值得看看JodaTime lib.也许他们有类似的实现,但我没有验证我自己(还).
归档时间: |
|
查看次数: |
3169 次 |
最近记录: |