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

How to convert a String data and time including month name to Date object in Java?

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

谢谢

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

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

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

此外,区域设置必须正确,可能是明确设置的。这里是英文。

java.time

我建议您使用 java.time,现代 Java 日期和时间 API,作为您的日期和时间工作。就像 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 class 感兴趣。但是,有时我们需要将 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);

示例输出:

Tue Oct 13 10:57:20 CST 2020

教程link

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