如何在 java 8 中将 LocalDate 从一种格式转换为另一种 LocalDate 格式而不使用字符串日期?

Sur*_*mar 3 java string formatting date localdate

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

如何使用format 来格式化 以上date内容。但您可以使用字符串日期模式,即。输出应该只是类型。LocalDatedd-MM-yyyydd-MM-yyyyLocalDate

Nik*_*las 5

此功能不是LocalDate类的责任,该类是表示日期的不可变日期时间对象。它的职责是不关心字符串格式表示。

要生成或解析字符串,请使用该类DateTimeFormatter

DateTimeFormatter pattern = DateTimeFormatter.ofPattern("dd-MM-yyyy");
String string = date.format(pattern);
Run Code Online (Sandbox Code Playgroud)

回到LocalDate,使用相同的模式:

LocalDate dateParsed = LocalDate.parse(string, pattern);
Run Code Online (Sandbox Code Playgroud)

但由于重写方法,新的dateParsed将再次转换为其默认的字符串表示形式。以下是文档的内容:LocalDatetoString()

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

您可能想实现自己的此类装饰器来处理格式设置。

  • 没错,这是不可能的。`LocalDate` 代表日期本身,而不是它的格式。要以不同的格式显示日期(例如“dd-MM-yyyy”),您必须使用“DateTimeFormatter”对其进行格式化,生成的结果将是“String”。当您使用相同的模式解析相同的“String”时,您将再次获得“LocalDate” - 但“System.out.println("date :" + date );”将打印完全相同的内容 - 它的默认表示形式。 (2认同)
  • 提示:您不必硬编码格式化模式,而是可以通过调用 `DateTimeFormatter.ofLocalized...` 方法来自动本地化 *java.time*。 (2认同)