首页 > 解决方案 > LocalDate 和 DateTimeFormatter 的 Java 6 替代方案

问题描述

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

LocalDate.parse(
    newDateString, 
    DateTimeFormatter.ofPattern(expectedDateFormat) 
)
.format(
    DateTimeFormatter.ofPattern(expectedDBDateFormat)
);

我的问题是我有一个 Java 6 项目,并且LocalDate没有DateTimeFormatter为 Java 6 定义。

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

标签: javajava-8java-timejava-6date-parsing

解决方案


有3个主要选择:

  • 使用ThreeTen-Backport (推荐)
    优势:与 Java 8 Time API (JSR-310) 基本相同的 API。迁移到 Java 8 非常容易。
    缺点:包名不同,不是JSR-310的完整实现。

    import org.threeten.bp.LocalDate;
    import org.threeten.bp.format.DateTimeFormatter;
    
    LocalDate.parse(input, DateTimeFormatter.ofPattern(inputFormat))
             .format(DateTimeFormatter.ofPattern(outputFormat));
    
  • 使用Joda-Time
    优势:适用于任何 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));
    
  • 使用 Java 6Date和 优势:将适用于所有未来的 Java 版本。没有第三方库。 缺点:API 存在缺陷,这就是创建 Java 8 Time API (JSR-310) 的原因。SimpleDateFormat

    import java.text.SimpleDateFormat;
    
    new SimpleDateFormat(outputFormat).format(
        new SimpleDateFormat(inputFormat).parse(input));
    

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

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

LocalDate.parse(input, DateTimeFormatter.ofPattern(inputFormat))
         .format(DateTimeFormatter.ofPattern(outputFormat));

推荐阅读