android– 获取错误java.text.ParseException:Unparseable date :(在偏移0处)即使Simple日期格式和字符串值相同

android– 获取错误java.text.ParseException:Unparseable date :(在偏移0处)即使Simple日期格式和字符串值相同,第1张

概述即使要检查的格式和字符串值相同,我总是得到解析异常.这是代码:Stringformat="EEEMMMddHH:mm:sszyyyy";Stringvalue="MonSep1810:30:06MST2017";publicstaticbooleanisValidFormat(Stringformat,Stringvalue){Datedate=null;try{

即使要检查的格式和字符串值相同,我总是得到解析异常.
这是代码:

String format = "EEE MMM dd HH:mm:ss z yyyy";String value = "Mon Sep 18 10:30:06 MST 2017";public static boolean isValIDFormat(String format, String value) {    Date date = null;    try {        SimpleDateFormat sdf = new SimpleDateFormat(format);        date = sdf.parse(value); // here it breaks        if (!value.equals(sdf.format(date))) {            date = null;        }    } catch (ParseException ex) {        ex.printstacktrace(); //java.text.ParseException: Unparseable date:                                 "Mon Sep 18 10:30:06 MST 2017" (at offset 0)    }    return date != null;}

解决方法:

它表示你的日期 – 时间字符串在索引0处是不可解析的.索引0是它所说的Mon,所以三个字母的时区缩写不是第一个嫌疑人.区域设置是. “Mon”是英语周一的缩写,但不是很多其他语言的缩写.因此,如果您的设备具有非英语语言设置 – 可能最近甚至已更改 – 这将完全解释您的观察结果.

短视的解决方案是

        SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.ROOT);

我使用Locale.ROOT来表示不应该进行特定于语言的处理.如果你的字符串是英文的,因为英语通常是全球计算中使用的语言,我认为这个选择是合适的.另一方面,如果它是英语,因为它来自英语区域,那么该区域设置将是正确的使用区域.

通过此更改,在我的计算机上,您的代码将您的日期格式化为2017年9月18日11:30:06 MDT 2017,正如您所看到的,它与我们开始的值不同,因此您的方法返回false.我的JVM将MST理解为山地标准时间,然后在9月假设夏令时(DST)并相应地格式化字符串.

ThreeTenABP

也就是说,Date和SimpleDateFormat是很久的过时类.您应该考虑摆脱它们并使用现代Java日期和时间API.在AndroID上你可以在ThreeTenABP中看到它,见this question: How to use ThreeTenABP in Android Project.现在你可以这样做:

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format, Locale.ROOT);    try {        return zoneddatetime.parse(value, dtf).format(dtf).equals(value);     } catch (DateTimeParseException dtpe) {        dtpe.printstacktrace();        return false;    }

这与上面的行为相同.

三个字母的时区缩写

您应该尽可能避免使用三个和四个字母的时区缩写.它们不是标准化的,通常含糊不清.例如,MST可能意味着马来西亚标准时间或山地标准时间.后者甚至不是一个全时区,因为MDT在一年中的大部分时间都在使用,这引起了我在上面所说的观察到的麻烦.

相反,看看你是否可以获得ISO 8601格式的字符串,如2017-09-18T10:30:06 08:00.第二好,只是得到一些明确的东西.一种方法是包括UTC的偏移而不是时区ID(或两者).

总结

以上是内存溢出为你收集整理的android – 获取错误java.text.ParseException:Unparseable date :(在偏移0处)即使Simple日期格式和字符串值相同全部内容,希望文章能够帮你解决android – 获取错误java.text.ParseException:Unparseable date :(在偏移0处)即使Simple日期格式和字符串值相同所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1103573.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存