Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android:如何将字符串转换为日期_Java_Android_Parsing_Simpledateformat - Fatal编程技术网

Java android:如何将字符串转换为日期

Java android:如何将字符串转换为日期,java,android,parsing,simpledateformat,Java,Android,Parsing,Simpledateformat,我正在制作一个应用程序,它使用一个API提供带有时间戳的数据。 时间戳如下所示: Jul 20, 2018 我想将字符串转换为日期。 我尝试用这段代码将字符串解析为日期 DateFormat dateFormat = new SimpleDateFormat("MMM dd, yyyy", Locale.US); Date date = dateFormat.parse("Jul 20, 2018"); 但我甚至不能编译我的代码。每次尝试使用dateformat.pa

我正在制作一个应用程序,它使用一个API提供带有时间戳的数据。 时间戳如下所示:

Jul 20, 2018
我想将字符串转换为日期。 我尝试用这段代码将字符串解析为日期

DateFormat dateFormat = new SimpleDateFormat("MMM dd, yyyy", Locale.US);
            Date date = dateFormat.parse("Jul 20, 2018");
但我甚至不能编译我的代码。每次尝试使用dateformat.parse()解析字符串时,我都会遇到以下编译错误:

java.text.ParseException
这甚至在代码中将鼠标悬停在.parse()上方时显示 我浏览了一整天,并尝试了几种不同的方法,但每次使用.parse()时都会出现这个错误。我真的不知道该怎么办了

我还没有发布图片的权限,但你可以在这里观看截图:

我使用的是Java8(支持lambda表示法)。我使用的是androidx.legacy:legacy支持库,最低API 19,目标API 28。 (因此,此问题的解决方案也应支持较旧的设备)

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


该错误告诉您,您正在调用的函数可能引发特定异常,而您无法捕获该异常(
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
}

您可以使用Java 8的新API。

LocalDateTime日期=LocalDateTime.parse(字符序列文本)

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

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

    try {
        LocalDate date = LocalDate.parse("Jul 20, 2018", dateFormatter);
    } catch (DateTimeParseException dtpe) {
        dtpe.printStackTrace();
    } 
我使用的是
java.time
,这是一种现代的java日期和时间API,因为它使用起来更方便,尤其是旧的
SimpleDataFormat
类以麻烦而闻名。一个区别是:旧类在解析时抛出了一个选中的异常,这迫使我们对周围的方法使用
try
-
catch
throws
声明。现代类抛出未经检查的异常,这让我们决定是否捕获和处理它们。但不要被愚弄:它们仍然是例外,可能会导致应用程序崩溃,因此如果出现格式不正确的字符串,最好处理它们

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

问题:我可以在Android上使用java.time吗? 是的,
java.time
在较旧和较新的Android设备上运行良好。它至少需要Java6

  • 在Java8和更高版本以及更新的Android设备上(我听说是API级别26),现代API是内置的
  • 在Java6和Java7中,获取三个后端口,即新类的后端口(三个用于JSR310;请参阅底部的链接)
  • 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
    org.threeten.bp
    导入日期和时间类
链接
  • 解释如何使用
    java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

答案在您提供的第4个链接中。您的代码正确编译并给出正确答案。欢迎使用堆栈溢出。你的问题自相矛盾。你说你不能编译。您说您得到了一个异常,它只能在运行时发生,也就是说,在您成功编译之后。您可能会对编译时错误和运行时错误之间的区别感到困惑?我投票决定结束,因为我不清楚你在问什么。请在这个问题中澄清,我将很乐意收回我的近距离投票。如果你在运行程序时有例外,那么这可能是一个重复的OT。作为一个旁白,考虑扔掉长期过时和臭名昭著的麻烦< <代码> SimpleDateFormat <代码>和朋友们。并添加到Android项目中,以便使用现代java日期和时间API
java.time
。这是一个非常好的工作方式。这个问题只是关于日期,而不是日期时间。因此,
LocalDate
class。使用java.time(现代API)是一个好主意。如果提问者的意思是“时间戳”,那么你的答案很接近。另一方面,如果我们相信字符串是
2018年7月20日
,@BasilBourque正确地认为
LocalDate
是正确的类。多亏了您,我成功地解决了这个问题。仅日期日期,需要在尝试中。不是整个dateFormat:dateFormat dateFormat=new SimpleDateFormat(“MMM-dd,yyyy”,Locale.US);尝试{Date Date=dateFormat.parse(“2018年7月20日”);}catch(java.text.ParseException e){e.printStackTrace();}if(game.getbuynolline().equals(“true”){onlineGames.add(game);}
    try {
        LocalDate date = LocalDate.parse("Jul 20, 2018", dateFormatter);
    } catch (DateTimeParseException dtpe) {
        dtpe.printStackTrace();
    }