Java android:如何将字符串转换为日期
我正在制作一个应用程序,它使用一个API提供带有时间戳的数据。 时间戳如下所示: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
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
- ,解释得非常透彻
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();
}