android: how to convert a string to Date
我正在开发一个应用程序,它使用一个提供带有时间戳的数据的API。时间戳如下:
1 | Jul 20, 2018 |
我想把字符串转换成日期。我尝试使用此代码将字符串解析为日期。
1 2 | DateFormat dateFormat = new SimpleDateFormat("MMM dd, yyyy", Locale.US); Date date = dateFormat.parse("Jul 20, 2018"); |
号
但我甚至不能编译我的代码。每次我试图用dateformat.parse()分析字符串时,都会出现以下编译错误:
1 | java.text.ParseException |
当鼠标悬停在代码中的.parse()上方时,甚至会出现这种情况。我浏览了一整天,尝试了两种不同的方法,但每次使用.parse()时都会出现这个错误。我真的不知道该怎么做了。
我还没有发布图片的权限,但是你可以在这里观看截图:https://imgur.com/ux5l9hy
我使用Java 8(支持lambda符号)。我使用的是androidx.legacy:legacy支持库,最低API 19和目标API 28。(所以这个问题的解决方案也应该支持较旧的设备)
我尝试过但失败的其他事情:
Android,如何将字符串转换为日期?
无法在Android中将字符串转换为日期
如何将"2017—04-26T20:55∶0.00Z"字符串转换成Java Android工作室中的日期
Android日期格式分析引发未处理的异常
如何将此格式中的日期转换为Java日期(字符串来自一个露天属性)(7月13日下午2010点00分CEST)
用Java将字符串转换为日期
java.time时间
1 2 3 4 | DateTimeFormatter dateFormatter = DateTimeFormatter .ofLocalizedDate(FormatStyle.MEDIUM) .withLocale(Locale.US); LocalDate date = LocalDate.parse("Jul 20, 2018", dateFormatter); |
号
如果您知道您的日期字符串是正确的,只需使用上面的代码而不使用任何
1 2 3 4 5 | try { LocalDate date = LocalDate.parse("Jul 20, 2018", dateFormatter); } catch (DateTimeParseException dtpe) { dtpe.printStackTrace(); } |
我使用的是EDCOX1,6,现代Java日期和时间API,因为它工作得更好,而旧的EDCOX1×7类特别是因为麻烦而出名。一个区别是:旧类在解析时抛出了一个检查异常,这迫使我们在周围的方法上使用
作为一个旁注,使用Java的内置日期格式比指定自己的日期格式更重要。它更简单,更不容易出错,更容易适应其他语言和文化的受众。您的格式与美国地区的中等样式格式一致,所以我使用了这个格式。
问:我可以在Android上使用java.time吗?是的,
- 在Java 8和以后以及新的Android设备(从API级别26,我被告知)现代API是内置的。
- 在Java 6和7中获得三重后端,即新类的后端(JSR 310的三层,参见底部的链接)。
- 在(旧版)Android上,使用Android版的threeten backport。这叫"三连珠"。并确保从带有子包的
org.threeten.bp 导入日期和时间类。
链接
- Oracle教程:解释如何使用
java.time 的日期时间。 - Java规范请求(JSR)310,其中首先描述了EDCOX1(6)。
- TeLeTeN后端项目,EDCOX1对ThreeTen 6和7的后端(JSR-310的6)。
- threetenabp,Android版的threeten backport
- 问题:如何在android项目中使用threetenabp,有一个非常透彻的解释。
您可以使用Java 8的新API。
localdatetime date=localdatetime.parse(字符序列文本)
文本-要分析的文本,如"2007-12-03T10:15:30",不为空。
这个错误告诉您正在调用的函数可以抛出一个特定的异常,但您没有捕获它(如果字符串无法解析,
试试这个
1 2 3 4 5 6 7 | try { DateFormat dateFormat = new SimpleDateFormat("MMM dd, yyyy", Locale.US); Date date = dateFormat.parse("Jul 20, 2018"); } catch(ParseException pe ) { // handle the failure } |