首页 > Java > java教程 > 为什么我的 Java SimpleDateFormat 代码抛出'无法解析的日期”错误,如何修复它?

为什么我的 Java SimpleDateFormat 代码抛出'无法解析的日期”错误,如何修复它?

Patricia Arquette
发布: 2024-12-26 02:57:09
原创
961 人浏览过

Why Does My Java SimpleDateFormat Code Throw an

揭开 Java SimpleDateFormat 中“无法解析日期”错误的谜团


在 Java 编程领域,SimpleDateFormat 类具有通常会带来挑战,尤其是在处理日期解析时。神秘的错误“java.text.ParseException: Unparseable date”可能会让开发人员感到困惑和沮丧。

为了解开这个谜团,让我们深入研究错误的原因。顾名思义,SimpleDateFormat 期望在解析日期时指定 Locale。默认情况下,它采用系统的区域设置,这可能并不总是与所需的格式一致。这种不匹配可能会导致可怕的错误。

解决方案在于向 SimpleDateFormat 构造函数显式提供 Locale。通过指定适当的区域设置,您可以确保根据所需的文化约定来解析日期。

案例研究:Android 模拟器与手机


该问题凸显了 Android 模拟器中的日期解析与实际设备上的日期解析之间的差异。这种差异源于这样一个事实:模拟器通常在英语区域设置下运行,而真实设备通常使用系统特定的区域设置。

要纠正此问题,您可以设置在整个应用程序中默认区域设置为英语,或在 SimpleDateFormat 中明确指定 Locale.ENGLISH

介绍 java.time:一种现代方法


虽然 SimpleDateFormat 已达到其目的,但值得注意的是 Java 8 引入了更现代、更强大的日期时间 API,java.time。该 API 不仅提供了广泛的日期时间类,还消除了 SimpleDateFormat 中与 Locale 相关的缺陷。

例如,java.time 中的 DateTimeFormatter 类提供了一种一致且可定制的方式来解析和格式化日期。它无需显式指定区域设置,因为它会自动默认为 JVM 的区域设置。

演示:使用 java.time


解决错误
<br>导入 java.time.LocalDateTime;<br>导入java.time.format.DateTimeFormatter;<p>公共类 Main {</p><pre class="brush:php;toolbar:false">public static void main(String[] args) {
    String strDateTime = "24 Oct 2016 7:31 pm";
    DateTimeFormatter dtf = DateTimeFormatter.<em>ofPattern</em>("d MMM uuuu h:m a");
    LocalDateTime ldt = LocalDateTime.<em>parse</em>(strDateTime, dtf);
    System.out.println(ldt);
}
登录后复制

}

输出: p>
<前>
2016-10-24T19:31

在此演示中,DateTimeFormatter.ofPattern 方法创建具有所需模式和默认区域设置的 DateTimeFormatter。 LocalDateTime.parse 方法使用此格式化程序成功解析日期时间字符串。

结论


通过显式指定 Locale 或转换为 java.time,可以有效解决“Unparseable date”错误简单日期格式。采用 java.time 不仅可以增强您的日期时间处理能力,还可以使您的代码与现代 Java 的最佳实践保持一致。

以上是为什么我的 Java SimpleDateFormat 代码抛出'无法解析的日期”错误,如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板