如何将包含月份名称的字符串数据和时间转换为 Java 中的 Date 对象?

Posted

技术标签:

【中文标题】如何将包含月份名称的字符串数据和时间转换为 Java 中的 Date 对象?【英文标题】:How to convert a String data and time including month name to Date object in Java? 【发布时间】:2021-12-02 20:16:06 【问题描述】:

我想将字符串中的日期转换为日期对象,即字符串“10h 57m 20s October 13 2020”。可以怎么做?可以先替换 h、m 和 s 以获得格式“2020 年 10 月 13 日 10:57:20”?同样,我尝试了最后一种格式“2020 年 10 月 13 日 10:57:20”来使用 DateTimeFormat 和 DateTimeFormatterBuilder() 获取日期,但不适用于月份,或者它可以工作,但小时转换为 00:00:00。

谢谢

【问题讨论】:

您能添加您尝试过的模式吗?另请参阅DateTimeFormatter 的 JavaDocs。您确实尝试了 4 个字母来触发“完整”文本表单,例如MMMM? 我根据我所做的重新格式化字符串“2020 年 10 月 13 日 10:57:20”尝试了这种格式:“hh:mm:ss MMMM dd yyyy”。 有关字符串到日期转换的更多详细信息,请参阅here 我们可以为您提供建议,但要解决您的所有问题,我们需要minimal reproducible example,请。 to Date object 如果你的意思是java.util.Date,我建议你不要使用那个类。它设计得很糟糕,而且已经过时了。而是使用来自java.time, the modern Java date and time API 的LocalDateTime。并使用您已经提到的DateTimeFormatter 进行解析(在这种情况下您不需要构建器)。 【参考方案1】:

java.time

我建议您使用现代 Java 日期和时间 API java.time 进行日期和时间工作。就像 Joop Eggen 已经写的那样,将格式中的字母放在格式模式字符串中的单引号中:

private static final DateTimeFormatter FORMATTER
        = DateTimeFormatter.ofPattern("H'h' m'm' s's' MMMM d y", Locale.ENGLISH);

这将允许您像这样解析:

    String dateInString = "10h 57m 20s October 13 2020";
    LocalDateTime dateTime = LocalDateTime.parse(dateInString, FORMATTER);
    System.out.println(dateTime);

输出:

2020-10-13T10:57:20

你不应该对老式的Date 类感兴趣。但是,有时我们需要将 Date 传递给尚未升级到 java.time 的旧版 API。转换要求我们知道为解析的日期和时间假定的时区。例如:

    ZoneId zone = ZoneId.of("America/Tegucigalpa");
    Instant i = dateTime.atZone(zone).toInstant();
    Date oldfashionedDate = Date.from(i);
    System.out.println(oldfashionedDate);

示例输出:

2020 年 10 月 13 日星期二 10:57:20 CST

教程链接

Oracle tutorial: Date Time 解释如何使用 java.time。

【讨论】:

【参考方案2】:

您可以将固定字母放在撇号中。

"HH'h' mm'm' ss's' MMMM dd yyyy"

此外,hh 是与a AM/PM 组合的 12 小时格式。 HH 是 24 小时格式。

语言环境也必须正确,可能是明确设置的。这里是英文。

【讨论】:

以上是关于如何将包含月份名称的字符串数据和时间转换为 Java 中的 Date 对象?的主要内容,如果未能解决你的问题,请参考以下文章

Pentaho 水壶将月份数值转换为月份名称

在不了解文化的情况下将月份名称从一种语言转换为另一种语言?

如何在包含单词、三个字母月份和两位数字年份的字符串中搜索月份和年份并将它们转换为 SQL 中的日期?

将一列日期数字转换为缩写月份

将 bigint 转换为日期(月份名称)

将月份名称转换为香草javascript中多种语言的数字