2016-08-03 21 views
5

Sau đây là mã chuyển đổi chuỗi thành đối tượng ngày giờ Joda dựa trên chuỗi định dạng.Java Joda thời gian tối đa hóa mã định dạng ngày

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; 
} 

Mã này cung cấp cho tôi những kết quả mong muốn nhưng sử dụng ngoại lệ như dòng điều khiển không phải là một design.Please tốt tối ưu hóa mã.

+2

Tôi thích mã này :) –

+0

Trong bắt API này là OK. Di chuyển FORMATTERS ra ngoài phương thức (dưới dạng trường) và cuối cùng tĩnh. –

Trả lời

2

Sử dụng Joda, bạn có thể cố gắng làm điều này

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

Đó là giải pháp tốt nhất khi sử dụng Joda-Time +1. Nhưng tôi chắc chắn rằng Time4J lib của tôi bằng cách sử dụng [MultiFormatParser] (http://time4j.net/javadoc-en/net/time4j/format/expert/MultiFormatParser.html) vẫn còn nhanh hơn do tối ưu hóa nội bộ hơn ;-) cách, Java-8 là MUCH chậm hơn, rất buồn, xem thêm [JDK-issue] này (https://bugs.openjdk.java.net/browse/JDK-8152273). –

Các vấn đề liên quan