android – 获取错误java.text.ParseException:Unparseable date :(在偏移0处)即使Simple日期格式和字符串值相同
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了android – 获取错误java.text.ParseException:Unparseable date :(在偏移0处)即使Simple日期格式和字符串值相同,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2166字,纯文字阅读大概需要4分钟。
内容图文
![android – 获取错误java.text.ParseException:Unparseable date :(在偏移0处)即使Simple日期格式和字符串值相同](/upload/InfoBanner/zyjiaocheng/714/d2908ad44f4944559f38d8c957017516.jpg)
即使要检查的格式和字符串值相同,我总是得到解析异常.
这是代码:
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日期格式和字符串值相同所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。