提问人:Steve 提问时间:4/28/2023 最后编辑:deHaarSteve 更新时间:5/2/2023 访问量:65
当时间为以下格式时,如何为 java.time.format.DateTimeFormatter 选择模式:“Jan 17 2019 03:38:06 GMT+00:00” [duplicate]
How to choose a pattern for java.time.format.DateTimeFormatter when the time is of this format: "Jan 17 2019 03:38:06 GMT+00:00" [duplicate]
问:
我有以下代码:
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd yyyy HH:mm:ss 'GMT'xxx");
logger.debug("formatter: " + formatter);
ZonedDateTime zdt = ZonedDateTime.parse(rtime, formatter);
} catch (DateTimeParseException e) {
if (logger.isDebugEnabled()) {
logger.debug("Failed to parse device time [" + rtime + "] ", e);
}
}
rtime
这里是Jan 17 2019 03:38:06 GMT+00:00
调试正在打印输出
formatter: Text(MonthOfYear,SHORT)' 'Value(DayOfMonth,2)' 'Value(YearOfEra,4,19,EXCEEDS_PAD)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2)' ''GMT'Offset(+HH:MM,'+00:00')`
错误是:
Failed to parse device time [Jan 17 2019 03:38:06 GMT+00:00]
java.text.ParseException: Unparseable date: "Jan 17 2019 03:38:06 GMT+00:00"
我尝试了几种模式,但总是失败。
有人可以帮忙吗?
答:
1赞
deHaar
4/28/2023
#1
你的两个主要问题:DateTimeFormatter
- 缺少 ,这可能会导致 被使用,并且人们可能不知道缩写(例如,a would expect 而不是
Locale
Locale.getDefault()
Locale.ITALIAN
gen
Jan
) - 时区错误的模式字母(包含过时的偏移符号,从格林威治标准时间开始的小时数
String
)
你可以像这样解析它:
public static void main(String[] args) {
String rtime = "Jan 17 2019 03:38:06 GMT+00:00";
try {
DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("MMM dd uuuu HH:mm:ss VV", Locale.ENGLISH);
System.out.println("formatter: " + formatter);
ZonedDateTime zdt = ZonedDateTime.parse(rtime, formatter);
System.out.println(zdt);
} catch (DateTimeParseException e) {
System.err.println("Failed to parse device time [" + rtime + "] ");
}
}
输出:
2019-01-17T03:38:06Z[GMT]
您可以使用不同的输出来创建不同的输出。DateTimeFormatter
如果您对输入 s 有影响,最好建议您从中移除 ,只使用 ,它可以用来创建一个 .String
GMT
+00:00
OffsetDateTime
评论
Locale.ROOT
DateTimeParseException
java.text.ParseException