2014-12-29 28 views
0

目標是比較2次,1從android設備和另一個從數據庫服務器提供(在紀元),http://www.epochconverter.com/ 如果有一次更新,那麼另外,應該添加一個值(在listview中標記爲new,newItem = true;)。 使用(simpledateformat)提供的時間已經轉換爲字符串輸出(今天,一天中的月份,昨天)。比較2(時代)時間,如果一個更新,那麼其他做

在轉換爲字符串之前比較兩個(epoch)時間的最簡單方法是什麼?我已經在stackoverflow上搜索了一下,但我很不安全哪一個會適合我的目標,最好和最快。

private String getDateString(final Date d) { 
    if (d == null) 
     return ""; 

    int[] elements1, elements2; 

    elements1 = getDateElements(System.currentTimeMillis()); <-- current time 
    elements2 = getDateElements(d.getTime()); <-- db time 

    if (elements1[0] == elements2[0] && elements1[1] == elements2[1]) { 
     if (elements1[2] == elements2[2]) 
      return "Today"; 

     final Calendar c = Calendar.getInstance(); 
     c.setTimeInMillis(System.currentTimeMillis()); 
     c.add(Calendar.DAY_OF_MONTH, -1); 
     elements1 = getDateElements(c.getTimeInMillis()); 

     if (elements1[2] == elements2[2]) 
      return "Yesterday"; 

    } 
    return Util.formatDate(d); 
} 

public static String formatDate(final long dt) { 
    return formatDate(new Date(dt)); 
} 

public static String formatDate(final Date date) { 
    final DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, 
      DateFormat.SHORT); 
    return df.format(date); 
} 
+0

您是否嘗試過Date類中的'after'方法?類似'new Date()。after(db time)'... – Diego

+0

嗨Diego, Thx,還沒有,我首先要確保我能捕獲正確的數據,因爲一切都從SQL db和i來了'沒有進入SQL,但我想我是在正確的軌道上。 – Bjorn

回答

0

根據什麼你想對比的是,你已經擁有你需要的一切:

long currentTime = System.currentTimeMillis(); 
long dbTime = d.getTime(); 

if (dbTime < currentTime) { 
    // Do something 
} 

另外,由迭戈的意見建議,你可以使用Date#afterbefore方法:

public boolean isInFuture(Date d) { 
    return d.after(new Date()); 
} 
+0

嗨亞當, 這確實是一個解決方案。你認爲這可以保持在GetDateString函數中? 我更思考一個單獨的功能。如上所述,我正在尋找正確方法的反饋。值是來自SQL數據庫的基礎,我很不幸地成爲SQL。 – Bjorn

+0

你知道,我想我沒有閱讀其餘的方法。把它放在一個單獨的方法將會起作用,但這取決於你。你所做的只是比較兩個「長」值。我會用你可以使用的方法更新答案。 –

+0

嗨,亞當。很好,看起來不錯。我會在我回家的時候嘗試,仍然是@work。 Thx再次爲我努力讓你知道。 – Bjorn