如何在Java 8中将LocalDate从一个格式转换为另一个LocalDate格式,而无需使用String日期?

3
LocalDate date = LocalDate.now();
System.out.println("date :" + date );//default format is yyyy-MM-dd
System.out.println(date.getClass().getName());//java.time.LocalDate

如何使用格式“dd-MM-yyyy”将上述date转换为LocalDate类型。但您可以使用字符串日期模式即dd-MM-yyyy。输出应仅为LocalDate类型。

3
你必须使用字符串日期! date.format(DateTimeFormatter.ofPattern("dd-MM-yyyy")) - Youcef LAIDANI
1
您无法更改方法 LocalDate.toString() 的行为,因为类型 LocalDate 是 final。 - Meno Hochschild
1个回答

5
这个功能不是 LocalDate 类的职责,该类是一个表示日期时间对象的不可变类。它不关心字符串格式的表示形式。
要生成或解析字符串,请使用 DateTimeFormatter 类。
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("dd-MM-yyyy");
String string = date.format(pattern);

回到LocalDate,使用相同的模式:
LocalDate dateParsed = LocalDate.parse(string, pattern);

但是新的dateParsed将再次转换为其默认的字符串表示形式,因为LocalDate重写了toString()方法。文档中写道:

输出将采用ISO-8601格式uuuu-MM-dd。

您可能希望实现自己的此类修饰符来处理格式。


那么在LocalDate本身中从一种格式转换为另一种格式是不可能的吗? - Suresh Kumar
我们需要将 LocalDate 转换为 String(进行格式化)再转换回 LocalDate 吗? - Suresh Kumar
2
没错,这是不可能的。LocalDate 表示日期本身,而不是它的格式。要以不同的格式显示日期(例如 "dd-MM-yyyy"),您必须使用 DateTimeFormatter 格式化它,生成的结果将是 String。当您使用相同的模式解析完全相同的 String 时,您将再次获得 LocalDate - 但是 System.out.println("date :" + date ); 将打印完全相同的内容 - 它的默认表示形式。 - Nikolas Charalambidis
2
提示:与其硬编码格式化模式,不如通过调用“DateTimeFormatter.ofLocalized…”方法,让java.time自动本地化。 - Basil Bourque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接