【问题标题】:Why isn’t DateTimeFormatter formatting my String?为什么 DateTimeFormatter 不格式化我的字符串?
【发布时间】:2019-09-29 21:58:57
【问题描述】:

我有一个简单的日期字符串headerValues[5]="24.11.1946"。我只想转换,将其解析为日期对象。 所以我用

  DateTimeFormatter formatter = ofPattern(("dd.MM.yyyy");
  headerLine.setStartDate(LocalDate.parse(headerValues[5],datePattern));

输出是2012-04-25 不是我想要的24.11.1946???

为什么???

编辑

我试过了……

DateTimeFormatter datePattern = DateTimeFormatter.ofPattern("dd.MM.yyyy", Locale.GERMANY);
String date = "24.11.1946";
System.out.println("Date = "+ LocalDate.parse(date,datePattern));

输出是...

日期 = 1946-11-24

【问题讨论】:

  • 您发布的代码的第二行不应该是:headerLine.setStartDate(LocalDate.parse(headerValues[5], formatter)); 吗?
  • 您发布的代码的第一行不应该是:DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); 吗?
  • 是的,它是错字仍然无法正常输出
  • 那我建议你发一个minimal reproducible example
  • 您应该edit您的问题并添加您的最后评论。没关系,我是为你做的。那么你得到的输出有什么问题?

标签: java datetime datetime-format localdate java-time


【解决方案1】:

这部分代码...

LocalDate.parse(date,datePattern)

创建一个LocalDate 实例。

因此在这行代码中...

System.out.println("Date = "+ LocalDate.parse(date,datePattern));

您实际上是在调用 LocalDate 类的方法 toString()

来自该方法的 javadoc...

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

你不想要那种格式。您需要 datePattern 对象的格式。因此,您应该更改发布到的代码的最后一行...

System.out.println(datePattern.format(LocalDate.parse(date,datePattern)));

换句话说,同一个DateTimeFormatter 对象既可用于将String 解析为日期,也可将日期格式化为String

【讨论】:

  • 您好,我发现 DateTimeFormatter.format 方法返回一个字符串,我需要一个 LocalDate 对象???
  • 有没有办法制作一个 24.11.1946 对象并按原样保存而不格式化字符串?
  • 此代码 - LocalDate.parse(date,datePattern) - 返回一个 LocalDate 对象。那是你要的吗?你只想要一个LocalDate 对象吗?
  • a Date 本身很少(如果有的话)及时存储实际的字符串或格式 - 它通常存储一个与纪元相距一定数量的长整数。您需要使用该格式化程序在您想要的字符串表示和表示它的实际 Date 对象之间进行转换;如果您想简化这一点,请制作一些包装您的日期对象并提供该功能的东西
  • @Rogue 我认为你需要向 OP 解释这一点——而不是向我解释 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 2015-04-27
  • 1970-01-01
相关资源
最近更新 更多