2016-08-03 21 views
5

以下は、書式文字列に基づいて文字列をJoda datetimeオブジェクトに変換するコードです。Java Joda時刻複数の日付書式コードの最適化

public Datetime ConvertDateTime(String dateStr) { 

    List<DateTimeFormatter> FORMATTERS = 
     Arrays.asList(
      DateTimeFormat.forPattern("MM/dd/yyyy hh:mm:ss.SSS a"), 
      DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS"), 
      DateTimeFormat.forPattern("MM-dd-yyyy hh:mm:ss.SSS a"), 
      DateTimeFormat.forPattern("MM dd yyyy hh:mm:ss.SSS a"), 
      DateTimeFormat.forPattern("MM-dd-yyyy hh.mm.ss.SSS a")); 

    if (dateStr != null) { 
    for (DateTimeFormatter formatter : FORMATTERS) { 
     try { 
     DateTime dt = formatter.parseDateTime(dateStr); 
     return dt; 
     } catch (IllegalArgumentException e) { 
     // Go on to the next format 
     } 
    } 
    } 
    return null; 
} 

このコードは私に、所望の結果を提供するが、制御フローとして例外を使用してコードを最適化良いdesign.Pleaseありません。ジョダを使用して

+2

をやって試すことができます私はこのコードを好き:)このAPIキャッチで –

+0

はOKです。 FORMATTERSをメソッド外(フィールドとして)および静的finalに移動します。 –

答えて

2

、あなたはこの

import org.joda.time.DateTime; 
import org.joda.time.format.DateTimeFormat; 
import org.joda.time.format.DateTimeFormatter; 
import org.joda.time.format.DateTimeFormatterBuilder; 
import org.joda.time.format.DateTimeParser; 

public class JODATester { 

    public static void main(String[] args) { 
     DateTimeParser[] parserList = { DateTimeFormat.forPattern("MM/dd/yyyy hh:mm:ss.SSS a").getParser(), 
       DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS").getParser(), 
       DateTimeFormat.forPattern("MM-dd-yyyy hh:mm:ss.SSS a").getParser(), 
       DateTimeFormat.forPattern("MM dd yyyy hh:mm:ss.SSS a").getParser(), 
       DateTimeFormat.forPattern("MM-dd-yyyy hh.mm.ss.SSS a").getParser() }; 
     DateTimeFormatter formatter = new DateTimeFormatterBuilder().append(null, parserList).toFormatter(); 

     DateTime date1 = formatter.parseDateTime("2010-01-01 01:01:01.001"); 
     DateTime date2 = formatter.parseDateTime("08/03/2016 03:01:33.790 PM"); 

     System.out.println(date2); 

     System.out.println(date1); 

//  
//  DateTime dt = new DateTime(); 
//  DateTimeFormatter fmt = DateTimeFormat.forPattern("MM/dd/yyyy hh:mm:ss.SSS a"); 
//  String str = fmt.print(dt); 
//  
//  System.out.println(str); 

    } 

} 
+0

それはJoda-Time +1を使用する最良のソリューションです。しかし、私は、[MultiFormatParser](http://time4j.net/javadoc-en/net/time4j/format/expert/MultiFormatParser.html)を使っている私のlib Time4Jがもっと内部的な最適化のためにもっと速いことを確信しています;-) Java-8の方がずっと遅く、非常に悲しいです。この[JDK-issue](https://bugs.openjdk.java.net/browse/JDK-8152273)も参照してください。 –