- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将字符串转换为 Java 11 中的 Date 对象。下面的代码给出了异常。尝试了不同的方法,到目前为止没有运气。对解决此错误消息有任何帮助吗?
String date = 'Mon Aug 02 16:33:10 EDT 2021'
OffsetDateTime odt = OffsetDateTime.now( ZoneId.systemDefault() ) ;
DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("E MMM d H:m:s z yyyy").toFormatter().ofLocalizedDateTime(FormatStyle.LONG) .withZone(odt.getOffset());
LocalDateTime localDateTime = LocalDateTime.parse(date, formatter);
System.out.println(localDateTime);
System.out.println(formatter.format(localDateTime));
错误
Exception in thread "main" java.time.format.DateTimeParseException: Text 'Mon Aug 02 16:33:10 EDT 2021' could not be parsed at index 20
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2046)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
at java.base/java.time.LocalDateTime.parse(LocalDateTime.java:492)
at java_time_LocalDateTime$parse.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:148)
最佳答案
好的 IDE 会针对您尝试编译的代码发出警告。例如,Eclipse 警告
The static method
ofLocalizedDateTime(FormatStyle)
from the typeDateTimeFormatter
should be accessed in a static way
Java 允许您通过引用表达式访问类的static
成员。尽管如此,还是有强烈的共识,你 should not , 并忽略语言功能。
针对您的具体情况,
new DateTimeFormatterBuilder().appendPattern("E MMM d H:m:s z yyyy")
.toFormatter()
.ofLocalizedDateTime(FormatStyle.LONG)
.withZone(odt.getOffset());
静态DateTimeFormatter#ofLocalizedDate(FormatStyle)
在类型为 DateTimeFormatter
的引用表达式 [...].toFormatter()
上调用。您似乎认为它是在实际的 DateTimeFormatter
实例上调用的,但实际上它只是一个 static
方法调用。 .toFormatter()
返回的实例被丢弃。您的代码本质上等同于
new DateTimeFormatterBuilder().appendPattern("E MMM d H:m:s z yyyy")
.toFormatter(); // thrown away
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG)
.withZone(odt.getOffset());
换句话说,您的formatter
具有由ofLocalizedDateTime
选择的格式,而不是"E MMM d H:m:s z yyyy"
你正在尝试使用。据推测,对于您的默认 Locale
,该格式无法解析您的日期字符串。
不清楚您是否打算使用该方法。如果您知 Prop 有适当格式的相应语言环境,则可以跳过您的自定义模式并只使用选定的模式
Locale currentLocale = /* whatever is appropriate */;
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG)
.withLocale(currentLocale);
然后解析你的日期字符串。
否则,完全忽略该方法,只使用您提供的模式和时区构建您的 DateTimeFormatter
:
DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("E MMM d H:m:s z yyyy")
.toFormatter()
.withZone(odt.getOffset());
你可以从 DateTimeFormatter
class javadoc 中看出,你的模式字符串
E MMM d H:m:s z yyyy
可以正确解析你的日期字符串
Mon Aug 02 16:33:10 EDT 2021
无关,你确定 LocalDateTime
是你需要的吗?您实际上丢失了原始字符串中的时区信息 (EDT)。此外,提供给 withZone
的 ZoneId
将被忽略以解析为 LocalDateTime
。
关于无法在索引 20 处解析 Java 11 DateTimeParseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62517353/
从 https://api.spacexdata.com/v3/launches 获取日期此日期的格式为:2006-03-25T10:30:00+12:00。我想将它转换为“dd, mm, yyyy”
从 https://api.spacexdata.com/v3/launches 获取日期此日期的格式为:2006-03-25T10:30:00+12:00。我想将它转换为“dd, mm, yyyy”
我正在尝试使用 ThreeTenBP 将日期字符串从服务器转换为日期时间。我的方法如下所示: String toDateTime(String dateString) { DateTimeFo
尝试更改字符串的日期格式但出现 DateTimeException: String oldDate = "2018-12-18T17:04:56+00:00"; String outputFormat
我正在尝试使用 Java OffsetDateTime 解析日期字符串,但出现异常。 字符串如下所示:"20101217180000GMT+0800" 我的方法是这样的: OffsetDateTime
这个问题在这里已经有了答案: Exception when trying to parse a LocalDateTime (1 个回答) 关闭 4 年前。 基本上,我试图将字符串解析为时间戳。 p
我正在从 SQLite 数据库加载一个字符串,然后尝试将其转换为 LocalDate,以便我可以将其添加为对象参数,然后比较列表中对象的日期。 但是应用程序崩溃并给出 DateTimeParseExc
我正在将正常日期解析为 LocalDate 格式。在转换时,我收到一个异常调用。 Caused by: java.time.format.DateTimeParseException: Text '2
以下代码抛出 DateTimeParseException: DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd
我正在尝试从 sql 中解析时间戳对象并且遇到了问题,这是我所拥有的: DateTimeFormatter dateDTF = DateTimeFormatter.ofLocalizedDateTi
我尝试将字符串从 JSON 转换为 ZonedDateTime,就像 static String getWatchTime(JSONObject aJson, JSONObject bJson) {
使用的jdk:1.8 不确定问题是什么,configuredFormat 是有效的,inputTime 也是有效的,真的很困惑问题是什么。 public class Test { public
我正在尝试解析以下日期“Wed, 26 Feb 2020 03:42:25 -0800” String datePattern = "EEE, dd MMM yyyy HH:mm:ss Z"; Dat
我需要以年、月、日和秒为单位计算年龄,我使用 jcalendar 来获取用户输入,但我不断收到 DateTimeParseException 错误,有人可以告诉我如何解决这个问题吗? JDat
这个问题在这里已经有了答案: Is java.time failing to parse fraction-of-second? (3 个答案) 关闭 7 年前。 LocalDateTime.par
目标 为可以处理以下格式之一的输入的 LocalDate 实例提供灵活的解析器: 年 年月 年月日 实现尝试 下面的类尝试处理第一个和第二个模式。解析适用于年份输入,但年份 + 月份会导致下面列出的异
我想用 DateTimeFormatter 将像 Wed, 21 Oct 2016 07:28:00 GMT 这样的 GMT 日期解析成 Instant .为了创建模式,我使用了官方文档:DateTi
我正在尝试将字符串转换为 Java 11 中的 Date 对象。下面的代码给出了异常。尝试了不同的方法,到目前为止没有运气。对解决此错误消息有任何帮助吗? String date = 'Mon Aug
我正在尝试解析日期以将其转换为纪元。我尝试了 similar question here 的解决方案没有成功: String date = "Jun 4 2015"; DateTimeForma
我正在尝试使用 Java 8 DateTimeFormatter 类来解析西类牙语的时间字符串。经过几个小时的搜索,我找不到任何提示。返回的错误是: java.time.format.DateTime
我是一名优秀的程序员,十分优秀!