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的项目,LocalDate并DateTimeFormatter没有为Java 6的定义.
如何在Java 6项目中解析日期?
主要有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)