【问题标题】:java - Is there a way to get pattern of a given date string Or from a LocalDatejava - 有没有办法获取给定日期字符串或从 LocalDate 的模式
【发布时间】:2019-08-23 08:26:22
【问题描述】:

我有一个 LocalDate 对象,但我正在努力使用 Java 8 中的 DateTimeFormatter 类以编程方式查找模式。有没有办法做到这一点或任何第三方库?

我尝试了以下方法,但我不想使用 DateFormat 类,因为不推荐这样做。

LocalDateTime.parse("8/22/19 4:39 PM").format(DateTimeFormatter.ofPattern(pattern1).withLocale(Locale.getDefault()))

“打印这是我想要的 -> M/d/yy h:mm a(我真的想要'mm/dd/yyyy h:mm')

虽然如果我尝试使用上面的模式字符串来解析日期字符串,它会失败。给我这个例外”

Exception in thread "main" java.time.format.DateTimeParseException: Text '8/22/19 4:39 PM' could not be parsed at index 0
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)

“我想要这种行为的原因是在我们的 i18n 文件中配置了特定于区域设置的日期模式。如果这些不可用(未配置),我需要提供 jdk 区域设置/区域特定的日期模式。DateFormat 类有点给我,但不完全是”

【问题讨论】:

  • 你说你有一个 LocalDate 对象那么你为什么要解析一个字符串呢?请注意,LocalDate(或日期)没有格式,您可以在要将日期对象转换为字符串时选择格式。
  • 在我们的 i18n 文件中配置了特定于语言环境的日期模式。如果这些不可用(未配置),我需要提供 jdk 区域设置/区域特定日期模式。 DateTimeFormatter 有点给我,但不完全是。见上文。
  • 要获得您想要的模式,然后您自己提供它(为什么要尝试获得只是“有点正确”的东西?)。请参阅下面的答案或查看检索当前语言环境并使用它。
  • 您是否建议按国家/地区设置所有预定义格式并按区域设置访问它们?
  • 我的印象是你想要一种格式,也许你应该澄清你的问题。

标签: java datetime-format


【解决方案1】:

这里是一个使用 DateTimeFormatter 从和到 String 转换的示例。请注意,我使用 LocalDateTime 而不是 LocalDate,因为时间也包括在内。

DateTimeFormatter formatterWithTime = DateTimeFormatter.ofPattern("MM/dd/yy h:mm a").withLocale(Locale.US);

String outWithTime = formatterWithTime.format(LocalDateTime.now());
System.out.println(outWithTime);

String in = "08/22/19 4:39 PM";
LocalDateTime ldt = LocalDateTime.from(formatterWithTime.parse(in));
System.out.println(ldt);

这会打印出来

19 年 8 月 23 日上午 10:44
2019-08-22T16:39

【讨论】:

  • 对不起,但这不是我想要的。我不想提供模式。反之亦然。我想从给定的 LocalDateTime 中找出模式。
  • LocalDateTime 没有模式,所以无法完成
猜你喜欢
  • 2020-05-14
  • 2020-05-29
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 2020-11-02
  • 2013-09-13
相关资源
最近更新 更多