如何解析 DateTime 和日期之间的时间?

发布于 2025-01-12 08:20:49 字数 278 浏览 0 评论 0原文

我想解析一个日期时间变体,该变体具有日期之间的时间。为什么以下不起作用?

DateTimeFormatter.ofPattern("E L  d HH:mm:ss yyyy").parse("Tue Mar  1 01:29:47 2022")

结果:

java.time.format.DateTimeParseException:无法在索引 4 处解析文本“Tue Mar 1 01:29:47 2022”

I want to parse a date-time variant that has the time in between the dates. Why is the following not working?

DateTimeFormatter.ofPattern("E L  d HH:mm:ss yyyy").parse("Tue Mar  1 01:29:47 2022")

Result:

java.time.format.DateTimeParseException: Text 'Tue Mar 1 01:29:47 2022' could not be parsed at index 4

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情绪操控生活 2025-01-19 08:20:49

我认为您必须确保

  • 为缩写月份和星期几提供特定的Locale
  • 您在 DateTimeFormatter 的模式中使用正确的字符,

一年中的一个月是使用模式中的字符 M 进行解析,并且您必须确保使用正确的语言并且 M 的数量满足要求(例如 EEEE 将解析一周中的一整天,例如“星期一”)。通过将 Locale 传递给 DateTimeFormatter 可以确保这一点。具有单个 d 的模式将解析月份中没有前导零的天数,而 dd 则需要前导零到月份中的个位数天数。

下面是一个解析两个日期时间的示例,其中一个包含一位数的月份日期,另一个

DateTimeFormatter customDtf = DateTimeFormatter.ofPattern(
        "EEE MMM d HH:mm:ss yyyy",
        Locale.ENGLISH
);
    
System.out.println( // parse a datetime with a two-digit day of month
        LocalDateTime.parse("Mon Mar 14 01:29:47 2022", customDtf)
);
System.out.println( // parse a datetime with a one-digit day of month
        LocalDateTime.parse("Tue Mar 1 01:29:47 2022", customDtf)
);

如果在 main 中执行此示例代码,您将获得以下输出:

2022-03-14T01:29:47
2022-03-01T01:29:47

I think you have to make sure that

  • you provide a specific Locale for abbreviated months and days of week
  • you use the correct characters in the pattern of your DateTimeFormatter

A month of year is parsed using the character M in a pattern and you have to make sure the correct language is used and the amount of Ms meets the requirements (e.g. EEEE will parse a full day of week, like "Monday"). That's ensurable by passing a Locale to the DateTimeFormatter. A pattern with a single d will parse days of month without leading zeros, while dd would require leading zeros to single-digit days of month.

Here's an example parsing two datetimes, one with a single-digit day of month and one

DateTimeFormatter customDtf = DateTimeFormatter.ofPattern(
        "EEE MMM d HH:mm:ss yyyy",
        Locale.ENGLISH
);
    
System.out.println( // parse a datetime with a two-digit day of month
        LocalDateTime.parse("Mon Mar 14 01:29:47 2022", customDtf)
);
System.out.println( // parse a datetime with a one-digit day of month
        LocalDateTime.parse("Tue Mar 1 01:29:47 2022", customDtf)
);

If you execute this sample code in a main, you'll get the following output:

2022-03-14T01:29:47
2022-03-01T01:29:47
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文