如何解决Apache Date utils parseDateStrictly方法无法正常工作
DateUtils.parseDateStrictly("28 Sep 2018","dd MMMM yyyy")
上述日期的格式应为dd MMM yyyy(MMM表示较短的月份),但是MMMM还会解析较短的月份,从而导致无效的解析。我已经在使用parseDateStrictly方法。还有其他建议吗?
解决方法
java.time
我建议您将java.time用于日期和时间工作。一旦我们只有设计不良的DateUtils
和Date
类可以使用,Apache SimpleDateFormat
就很有用。我们不再需要它了。很长时间以来,我们不再需要它。
java.time具有开箱即用的预期功能。
DateTimeFormatter dateFormatter
= DateTimeFormatter.ofPattern("dd MMMM uuuu",Locale.ENGLISH);
String dateString = "28 Sep 2018";
LocalDate.parse(dateString,dateFormatter);
结果:
Exception in thread "main" java.time.format.DateTimeParseException: Text '28 Sep 2018' could not be parsed at index 3 at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2046) at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948) at java.base/java.time.LocalDate.parse(LocalDate.java:428) (etc.)
链接
Oracle tutorial: Date Time解释了如何使用java.time。
,列格式为dd MMMM yyyy,应解析日期,例如28 2018年9月,并且应在诸如2018年9月28日之类的值上引发错误
DateUtils
使用java.util
的日期时间API及其格式API SimpleDateFormat
,它们已经过时且容易出错。我建议您应该完全停止使用它们,并切换到modern date-time API。
使用现代的日期时间API:
import java.time.DateTimeException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
// Test strings
String[] arr = { "28 September 2018","28 Sep 2018","28 09 2018" };
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMMM uuuu",Locale.ENGLISH);
for (String s : arr) {
try {
LocalDate date = LocalDate.parse(s,formatter);
// ...Process date e.g.
System.out.println(DateTimeFormatter.ofPattern("MMMM dd,uuuu",Locale.ENGLISH).format(date));
} catch (DateTimeException e) {
System.out.println(s + " is not a valid string.");
}
}
}
}
输出:
September 28,2018
28 Sep 2018 is not a valid string.
28 09 2018 is not a valid string.
通过 Trail: Date Time 了解有关现代日期时间API的更多信息。
如果您正在为自己的Android项目执行此操作,并且您的Android API级别仍不符合Java-8,请选中Java 8+ APIs available through desugaring和How to use ThreeTenABP in Android Project。
,根据以上评论,“ 2018年9月28日”不会抛出任何相位错误,如果要断言判断,也许判断java.lang.String#length足够?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。