2010-08-13 38 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

相關問題