2011-04-13 33 views
0

我有許多日期字符串的列表,例如「Fri,2011年4月8日22:28:00 -0400」,需要將它們解析爲適當的格式(2011年4月8日星期五)。 我的問題是,該設備需要非常非常長的時間解析> 10個日期對象,偶爾內存不足。有沒有更有效的解析日期的方式爲:解析許多日期項目

SimpleDateFormat sdf = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH); 
// later in code 
try { 
     Date date = sdf.parse(myDateString); 
     return DateFormat.format("dd. MMMM yyyy", date).toString(); 
    } catch (java.text.ParseException e) { 
    } 

如何解析很多日期字符串非常快?

+1

你確定這是造成你的問題,而不是其他代碼?我有一個ListView列出了電視節目。對於每個電視節目,我都以「yyyy-MM-dd HH:mm.ss」格式解析/格式化日期爲「HH:mm」。今天在一個頻道上列出了超過30個節目,這種情況會立即發生 - 我可以'扔'滾動沒有任何問題。 10個日期對象應該不會造成任何問題。 – Squonk 2011-04-13 14:16:45

回答

0

一件事是存儲輸出DateFormat,就像你與輸入DateFormat做,這樣你不必創建一個新的每次:

DateFormat parser = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH); 
DateFormat formatter = new SimpleDateFormat("dd. MMMM yyyy"); 

// later in code 
try { 
    Date date = parser.parse(myDateString); 
    return formatter.format(date); 
} catch (java.text.ParseException e) {} 
+0

SimpleDateFormat不是線程安全的。這是一個鏈接到這個已知的bug:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6205670 – 2011-04-13 14:12:42

+0

謝謝,我知道它不是線程安全的。你想說啥?如果這確實是一個問題,解決方案是微不足道的。只需使用['ThreadLocal '](http://developer.android.com/reference/java/lang/ThreadLocal.html)。 – 2011-04-13 14:16:01

+0

這裏顯示的只是一個代碼片段,所以爲了確保線程安全而添加的代碼是不可見的。我只想指出SimpleDateFormat類不是線程安全的事實。 (我遇到了令人驚訝的數字例子,我曾經看到人們以不安全的方式使用這個類) – 2011-04-13 14:24:03

0

如果可能的話,將這個任務分配給你的數據庫(假設SQLite),看看它的Date and Time功能是否適用於你的情況。