簡體   English   中英

SimpleDateFormat的替代方法,用於日期解析

[英]Alternatives to SimpleDateFormat for date parsing

我真的需要SimpleDateFormat的替代品,我正在將許多Strig日期(> 100k)從JST轉換為GMT。 我遇到的問題是我的代碼生成了許多char [],正如我在分析時注意到的那樣。 對於150k日期,我使用了150MB的內存,這不是一個真正的選擇。 謝謝。

    SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
    sdf.setTimeZone(tz);
    try {
        Date theResult = sdf.parse(dateToConvert);
        SimpleDateFormat rdf = new SimpleDateFormat(resultDateFormat);
        rdf.setTimeZone(resultTz);
        return rdf.format(theResult);
    } catch (ParseException e) {
        e.printStackTrace();
    }

我不能使用Joda時間,所以這對我來說不是一個選擇。 :(

使用joda-time

org.joda.time.format.DateTimeFormatter dtf = 
         org.joda.time.format.DateTimeFormat.forPattern("yyyy-MM-dd");  
    org.joda.time.DateTime date = dtf.parseDateTime(yourDate); // String like 2000-12-12
    date.withZone(yourZone); // org.joda.time.DateTimeZone

作為一個起點,我將重用那些SimpleDateFormat實例,而不是為您需要轉換的每個日期重新創建它們。

是的,joda時間確實是一個不錯的API,但是user1143825忘了設置輸入timeZone。 我不能說內存性能,你必須測試它並比較結果。

這應該工作:

DateTimeFormatter sdf = DateTimeFormat.forPattern(dateFormat).withZone(tz);
try {
  DateTime theResult = sdf.parseDateTime(dateToConvert).withZone(resultTz)
  return theResult;
} catch (IllegalArgumentException e) {
  e.printStackTrace();
}

用java

            sample time format //31/Mar/2013:16:59:30 -0700 
            Date date = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z").parse(yourTIME);
            String time= new SimpleDateFormat("dd/MMM/yyyy, HH:mm").format(date);

使用joda庫時間轉換

         org.joda.time.format.DateTimeFormatter tf=org.joda.time.format.DateTimeFormat.forPattern("dd/MMM/yyyy:HH:mm:ss Z");
         org.joda.time.DateTime date = dtf.parseDateTime(time);
         String time=date.toString("dd/MMM/yyyy, HH:mm"));

這個庫提高了我的代碼速度性能

使用java代碼14991 ms使用joda庫1668 ms

您是否有特別的理由假設SimpleDateFormat在解析日期時效率低下? 除非你的日期具有非常具體的特性,這些特性適合於某種優化,否則我會認為JDK類能夠合理地完成它。

也就是說,假設您的日期並非完全不同(不太可能有100k),您可以查看緩存 - 使用傳入的String填充地圖並輸出Date 這可能會大大減少所需的解析量; 根據現有特性,它可能會或可能不會產生明顯的加速/記憶增益。

另外,每次創建兩個新的SimpleDateFormats可能效率非常低。 為什么不在加載類時創建這些實例(除非格式按行更改)? 如果SDF的內部結構在第一次運行時涉及很多char[]分配,這可能會解決您自己的問題。 (請記住,奇怪的日期格式不是線程安全的,因此如果同時使用解析類,您可能需要ThreadLocal<DateFormat> )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM