LocalDate和DateTimeFormatter的Java 6替代品

use*_*386 1 java date-parsing java-6 java-8 java-time

在Java 8项目中,我可以这样解析日期:

LocalDate.parse(
    newDateString, 
    DateTimeFormatter.ofPattern(expectedDateFormat) 
)
.format(
    DateTimeFormatter.ofPattern(expectedDBDateFormat)
);
Run Code Online (Sandbox Code Playgroud)

我的问题是,我有一个Java 6的项目,LocalDateDateTimeFormatter没有为Java 6的定义.

如何在Java 6项目中解析日期?

And*_*eas 8

主要有3种选择:

  • 使用Java 6 Date和 Advantage:适用于所有未来的Java版本.没有第三方库. 缺点:API存在缺陷,这就是创建Java 8 Time API(JSR-310)的原因.SimpleDateFormat

    import org.threeten.bp.LocalDate;
    import org.threeten.bp.format.DateTimeFormatter;
    
    LocalDate.parse(input, DateTimeFormatter.ofPattern(inputFormat))
             .format(DateTimeFormatter.ofPattern(outputFormat));
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用Joda-Time
    Advantage:适用于任何Java版本.
    缺点:不推荐使用,支持Java 8 Time API(JSR-310).

    import org.joda.time.LocalDate;
    import org.joda.time.format.DateTimeFormat;
    
    LocalDate.parse(input, DateTimeFormat.forPattern(inputFormat))
             .toString(DateTimeFormat.forPattern(outputFormat));
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用ThreeTen-Backport (推荐)
    优势:与Java 8 Time API(JSR-310)大致相同的API.迁移到Java 8非常容易.
    缺点:包名称不同,它不是JSR-310的完整实现.

    import java.text.SimpleDateFormat;
    
    new SimpleDateFormat(outputFormat).format(
        new SimpleDateFormat(inputFormat).parse(input));
    
    Run Code Online (Sandbox Code Playgroud)

为了比较,您的Java 8代码是:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

LocalDate.parse(input, DateTimeFormatter.ofPattern(inputFormat))
         .format(DateTimeFormatter.ofPattern(outputFormat));
Run Code Online (Sandbox Code Playgroud)

  • 我建议颠倒您的坯料顺序,将推荐路线放在顶部。 (2认同)