如何将包含月份名称的字符串数据和时间转换为 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 对象?的主要内容,如果未能解决你的问题,请参考以下文章