java如何解析java。文本ParseException:无法解析的日期:“2019年9月14日星期六00:00:00 GMT+0530(印度标准时间)”?
我需要把Sat Sep 14 2019 00:00:00 GMT+0530 (India Standard Time)
转换成日期。但我越来越
java.text.ParseException: Unparseable date: "Sat Sep 14 2019 00:00:00 GMT+0530 (India Standard Time)" exception
我试着说:
SimpleDateFormat formatter = new SimpleDateFormat("E MMM dd hh:mm:ss Z yyyy");
# 1 楼答案
爪哇。时间
此代码段的输出为:
不要使用
SimpleDateFormat
和Date
。这些课程设计拙劣,而且早已过时。相反,我使用的是java。时间,现代Java日期和时间API。和你一起工作真是太好了验证为王如果有一天你收到一个偏移量(如
+0530
或-0400
)与时区(如India Standard Time
或Australian Central Daylight Time
)不一致的字符串,你需要发现并采取适当的措施。因此,我将从解析的日期时间中取出偏移量,并将其与Java从时区派生的偏移量进行比较。在这种情况下,他们确实同意了。如果不是出于验证的需要,解析ZonedDateTime
的正常方法将是更简单的:指定区域设置
Sat
、Sep
和India Standard Time
是英文的。如果不确保使用英语语言环境进行解析,解析可能会失败。如果不是今天,那么有一天当你在一台具有不同语言环境设置的计算机上运行你的程序时你的代码出了什么问题
格式模式字符串中有几个错误。虽然从
SimpleDateFormat
得到的错误消息非常普遍,但java。时间有时更有用。看看能不能帮上忙。使用格式模式字符串:这让我们有了一个
索引13已经很重要了。字符串中的索引13是
2019
中的19
所在的位置。parse
方法使用您的格式模式来解析字符串,并已成功解析Sat Sep 14 20
,因为它匹配E MMM dd hh
。它知道一个小时只能是两个数字,所以只将20
解析为小时,然后解析对象,因为格式模式在小时之后指定了一个冒号,而20
之后没有任何冒号。您可能已经看到,我们应该在格式模式中指定uuuu
或yyyy
之后的年份。让我们修复,移动字符串中的yyyy
:我们大约是现在的两倍。索引25是
GMT+0530
所在的位置。所以这与格式模式字母Z
不匹配。文件上说Z
代表区域偏移,例如+0000-0800; -08:00. 您的字符串在偏移量前面有GMT
。我们通过将其转义为包含在单引号中的文本来解决它:索引33是^{之后的空格。格式模式字符串到此结束。有一种方法可以指示解析只解析尽可能多的字符串,但这将剥夺我们对时区的验证,所以我们不要求助于此。小写
z
代表时区名称:这是一个新的。需要注意的细节是:
HourOfAmPm=0
。我们不打算在上午或下午安排一个小时,只安排一天中的一个小时。错误是小写的hh
表示小时。对于从00到23的小时,我们需要大写^{现在解析成功,并给出与上面相同的结果。我想说的是java。时间正在更努力地帮助我们获得正确的格式模式
链接