关于java:android:如何将字符串转换为Date

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);

如果您知道您的日期字符串是正确的,只需使用上面的代码而不使用任何try--catch。如果需要验证字符串(通常是来自用户或其他系统的输入),请使用try--catch,可以直接在解析过程中使用,也可以在代码中最方便处理错误字符串的位置使用。例子:

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类特别是因为麻烦而出名。一个区别是:旧类在解析时抛出了一个检查异常,这迫使我们在周围的方法上使用try-catchthrows声明。现代类抛出未经检查的异常,不管我们是否想捕获和处理它们,这都留给我们。不过,不要被愚弄:它们仍然是例外,可能会导致应用程序崩溃,所以如果有可能出现格式不正确的字符串,最好处理它们。

作为一个旁注,使用Java的内置日期格式比指定自己的日期格式更重要。它更简单,更不容易出错,更容易适应其他语言和文化的受众。您的格式与美国地区的中等样式格式一致,所以我使用了这个格式。

问:我可以在Android上使用java.time吗?

是的,java.time在旧的和新的Android设备上工作得很好。它至少需要Java 6。

  • 在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",不为空。


这个错误告诉您正在调用的函数可以抛出一个特定的异常,但您没有捕获它(如果字符串无法解析,dateFormat.parse(...)可以抛出一个ParseException错误)。

试试这个

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
}