2010-08-13 116 views
1

我有一个DB按日期排序,并在我的输出,我想..行之间,显示经过时间这样的..是否有计算两次差值并显示相对结果的函数?

| 2008年10月10日上午08:34的入场#1

| 2008年10月10日上午9时45分入场#2 |距上次报名前1小时11分钟

|参赛作品#3于08/11/2010 06:57 AM | 1天3小时12分钟自上次进入

| 2008年11月11日08:34入场#4 |自上次进入后13小时37小时

| 2010年9月11日的入场#5 08:48 PM |一年一个月8分钟因为前一个条目

我已经看了getRelativeTimeSpanString(),但是1)它从现在& 2计算),它附加一个前缀/后缀。

有没有更简单的方法来做到这一点,除了创建一个自定义的datediff方法,并将所有这些与条件一起切分?

在此先感谢。

回答

9

我没有在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。也许他们有类似的实现,但我没有验证自己(还)。

+0

感谢您!我想我必须自己破解一些东西..你的代码是一个很好的开始,但..看起来像我必须添加天,周,月,年代码..耶!乐趣! :p – kefs 2010-08-13 22:03:57

+0

我最终修改并使用了以下类: http://www.technojeeves.com/joomla/index.php/free/71-difference-between-two-dates-in-java – kefs 2010-08-14 19:25:10

+0

不错。就像旁注一样。写一个单元测试,而不是一个虚拟的main()打印到控制台。通过这种方式,您已经验证了您的代码是否正常工作:) – Juri 2010-08-15 12:54:19

相关问题