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

问题描述 投票:0回答:3

我正在制作一个使用API​​的应用程序,它为数据提供时间戳。时间戳看起来像:

Jul 20, 2018

我想将字符串转换为日期。我尝试使用此代码将字符串解析为Date。

DateFormat dateFormat = new SimpleDateFormat("MMM dd, yyyy", Locale.US);
            Date date = dateFormat.parse("Jul 20, 2018");

但我甚至无法编译我的代码。每次我尝试使用dateformat.parse()解析一个字符串时,我得到以下编译错误:

java.text.ParseException

当我将代码中的.parse()悬停在我整天浏览的代码上并尝试了几个不同的东西时,甚至会出现这种情况,但每次使用.parse()时都会出现此错误。我真的知道该怎么做了。

我还没有发布图片的权限,但你可以在这里观看截图:https://imgur.com/ux5l9hY

我使用的是Java 8(支持lambda表示法)。我使用的是androidx.legacy:legacy-support库,最小API 19和目标API 28.(因此这个问题的解决方案也应该支持旧设备)

我尝试但失败的其他事情:

Android, How can I Convert String to Date?

Cant convert String to date in android

How to convert "2017-04-26T20:55:00.000Z" string to a Date in java android studio

Android date format parse throwing an Unhandled Exception

How to convert a date in this format (Tue Jul 13 00:00:00 CEST 2010) to a Java Date (The string comes from an alfresco property)

Convert string to Date in java

java android parsing simpledateformat
3个回答
0
投票

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

尝试这样的事情

try {
    DateFormat dateFormat = new SimpleDateFormat("MMM dd, yyyy", Locale.US);
    Date date = dateFormat.parse("Jul 20, 2018");
}
catch(ParseException pe ) {
    // handle the failure
}

1
投票

java.time

    DateTimeFormatter dateFormatter = DateTimeFormatter
            .ofLocalizedDate(FormatStyle.MEDIUM)
            .withLocale(Locale.US);
    LocalDate date = LocalDate.parse("Jul 20, 2018", dateFormatter); 

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

    try {
        LocalDate date = LocalDate.parse("Jul 20, 2018", dateFormatter);
    } catch (DateTimeParseException dtpe) {
        dtpe.printStackTrace();
    } 

我正在使用现代Java日期和时间API的java.time,因为它使用得更好,特别是旧的SimpleDateFormat类因为麻烦而闻名。一个区别是:旧类从解析中抛出一个检查异常,这迫使我们在周围方法上使用try-catchthrows声明。现代类抛出未经检查的异常,无论我们是否想要捕获和处理它们,都会留给我们。不要被愚弄:它们仍然是例外,可能会导致您的应用程序崩溃,因此如果有可能出现格式不正确的字符串,请更好地处理它们。

另外,请注意使用Java的内置日期格式而不是指定自己的日期格式。它更简单,更不容易出错,更容易适应其他语言和文化的受众。您的格式与美国语言环境的中等样式格式一致,因此我使用了此格式。

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

是的,java.time适用于较旧和较新的Android设备。它至少需要Java 6。

  • 在Java 8及更高版本和更新的Android设备上(从API级别26,我被告知)现代API内置。
  • 在Java 6和7中获取ThreeTen Backport,新类的后端端口(适用于JSR 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上使用Android版的ThreeTen Backport。它被称为ThreeTenABP。并确保从org.threeten.bp导入子包的日期和时间类。

链接


0
投票

您可以使用Java 8的新API。

LocalDateTime date = LocalDateTime.parse(CharSequence text)

text - 要解析的文本,例如“2007-12-03T10:15:30”,不为null。

© www.soinside.com 2019 - 2024. All rights reserved.