Java Joda时间多日期格式代码优化

Java Joda时间多日期格式代码优化,java,datetime,exception,optimization,jodatime,Java,Datetime,Exception,Optimization,Jodatime,以下是基于格式字符串将字符串转换为Joda datetime对象的代码 public Datetime ConvertDateTime(String dateStr) { List<DateTimeFormatter> FORMATTERS = Arrays.asList( DateTimeFormat.forPattern("MM/dd/yyyy hh:mm:ss.SSS a"), DateTimeFormat.forPat

以下是基于格式字符串将字符串转换为Joda datetime对象的代码

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;
}
public Datetime ConvertDateTime(字符串dateStr){
列表格式化程序=
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”),
模式的日期时间格式(“MM dd yyyy hh.MM.ss.SSS a”);
if(dateStr!=null){
for(DateTimeFormatter格式化程序:格式化程序){
试一试{
DateTime dt=formatter.parseDateTime(dateStr);
返回dt;
}捕获(IllegalArgumentException e){
//继续下一个格式
}
}
}
返回null;
}

此代码为我提供了所需的结果,但使用异常作为控制流不是一个好的设计。请优化代码。

使用Joda,您可以尝试这样做

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

    }

}

我喜欢这段代码:)在这个API中捕获是可以的。将格式化程序移到方法(as字段)和静态final之外。这是使用Joda Time+1的最佳解决方案。但我确信,由于更多的内部优化,我的lib Time4J的使用速度更快;-)顺便说一句,Java-8的速度要慢得多,非常可悲,请参见此。