在Java 8项目中,我可以这样解析日期:
LocalDate.parse(
newDateString,
DateTimeFormatter.ofPattern(expectedDateFormat)
)
.format(
DateTimeFormatter.ofPattern(expectedDBDateFormat)
);
我的问题是我有一个Java 6项目,并且没有为Java 6定义LocalDate
和DateTimeFormatter
。
如何在Java 6项目中解析日期?
答案 0 :(得分:7)
有三个主要选择:
使用Java 6 Date
和SimpleDateFormat
优点:适用于所有未来的Java版本。没有第三方图书馆。
缺点:API存在缺陷,这就是创建Java 8 Time API(JSR-310)的原因。
import java.text.SimpleDateFormat;
new SimpleDateFormat(outputFormat).format(
new SimpleDateFormat(inputFormat).parse(input));
使用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));
使用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));
为了进行比较,您的Java 8代码是:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
LocalDate.parse(input, DateTimeFormatter.ofPattern(inputFormat))
.format(DateTimeFormatter.ofPattern(outputFormat));
答案 1 :(得分:4)
java.time
- API有一个backport操作Java 6或7.所以我认为这是最简单的方法,尽可能少的更改。
其他答案也提倡Joda-Time,但主要的缺点是更改格式模式语法,因此不仅仅需要更改import语句或者更换构造函数与工厂方法。
最后(为了完整性),还有我的lib Time4J(v3.x for Java 6),其中包含基于类ChronoFormatter
的替代解析/格式引擎(以及等效的{ {1}}代替PlainDate
)。
答案 2 :(得分:1)
我想使用Joda time,您可以在代码中进行一些更改,您的代码应该是这样的:
LocalDate.parse(
newDateString, DateTimeFormat.forPattern(expectedDateFormat)
).toString(DateTimeFormat.forPattern(expectedDBDateFormat));
导入应为:
import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
而不是:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
如果您注意到有一些小变化:
In Java 8 Time In Joda Time
ofPattern(String pattern) => forPattern(String pattern)
format(DateTimeFormatter format) => toString(DateTimeFormat format)
答案 3 :(得分:-3)
在vanilla Java 6中,您可以使用日期类型和 SimpleDateFormat 类来解析表示日期的字符串/格式字符串。
SimpleDateFormat parser = new SimpleDateFormat(expectedDateFormat);
Date date = parser.parse(input);
SimpleDateFormat formatter = new SimpleDateFormat(expectedDBDateFormat);
String formattedDate = formatter.format(date);
正如其他答案中所提到的,这两个类都存在问题,因此自Java 8以来它们已被日期/时间API取代。更喜欢其中一个选项或者赌博,但避免在数据库中存储字符串格式的日期。