java.time 和 ThreeTenABP
这不是您要求的答案,但应该是其他读者在 2020 年及以后想要的答案。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/uuuu HH:mm:ss");
String result = "11/08/2013 08:48:10";
LocalDateTime dateTime = LocalDateTime.parse(result, formatter);
System.out.println("Parsed date and time: " + dateTime);
此片段的输出是:
解析日期和时间:2013-11-08T08:48:10
您使用的Date
类设计不佳且已过时,因此请不要再使用它。相反,我使用的是现代 Java 日期和时间 API java.time。如果您需要一个Date
您现在无法升级的旧版 API,则转换为:
Instant i = dateTime.atZone(ZoneId.systemDefault()).toInstant();
Date oldfashionedDate = DateTimeUtils.toDate(i);
System.out.println("Converted to old-fashioned Date: " + oldfashionedDate);
转换为老式日期:Fri Nov 08 08:48:10 CET 2013
你的代码出了什么问题?
它出什么问题了 ?
你的代码唯一的问题是你使用了臭名昭著的麻烦SimpleDateFOrmat
和设计糟糕的Date
类。当您在 2013 年提出这个问题时,这并没有错。 java.time 直到 4 个月后才问世。
您的代码运行良好。有人可能会推测字符串中的前导空格等阻止了解析。如果这是问题所在,请尝试解析result.trim()
而不是仅仅result
因为trim()
返回一个删除了前导和尾随空格的字符串。
问题:java.time 不需要 Android API 级别 26 吗?
java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少Java 6。
- 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。只有在这种情况下,转换为
Date
更简单一些:Date.from(i)
.
- 在非 Android Java 6 和 7 中获得 ThreeTen Backport,现代类的后向端口(ThreeTen 用于 JSR 310;请参阅底部的链接)。
- 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从
org.threeten.bp
子包中导入日期和时间类。
链接