SimpleDateFormat 解析 2 月 29 日的日期错误 [重复]

2024-02-20

我有这个有线

   public static boolean isFirstDayOfMonth(String format, String value) {
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    Date date = null;
    try {
        date = sdf.parse(value);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
    return dayOfMonth == 1;
   }

测试并返回true:

    boolean actual = CommonUtil.isFirstDayOfMonth("yyyy-MM-dd", "2021-02-29");
    assertTrue(actual);

我发现 SimpleDateFormat 将日期转换为 2021 年 3 月 1 日,尽管 2021 年 2 月没有 29 日。如果我传递 2021-02-30,这是无效的,但它返回正确的结果。


tl;dr

java.time.LocalDate.parse( "2021-02-29" )
…
catch ( DateTimeParseException e )  // Thrown for invalid inputs

java.time

您正在使用terrible几年前被取代的日期时间类java.timeJSR 310 中定义的类。

默认情况下,java.time.LocalDate类拒绝解析无效输入。解析异常的陷阱。

    try {
        LocalDate ld = LocalDate.parse( "2021-02-29" ) ;
        System.out.println( ld ) ;
    } catch ( DateTimeParseException e ) {
        // … handle invalid input
        System.out.println( "Faulty input" ) ;
    }

看到这个代码在 IdeOne.com 上实时运行 https://ideone.com/oxmcXg.


About java.time

The java.time https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/package-summary.html框架内置于 Java 8 及更高版本中。这些课程取代了麻烦的旧课程legacy https://en.wikipedia.org/wiki/Legacy_system日期时间类,例如java.util.Date https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Date.html, Calendar https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Calendar.html, & SimpleDateFormat https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/text/SimpleDateFormat.html.

要了解更多信息,请参阅甲骨文教程 http://docs.oracle.com/javase/tutorial/datetime/TOC.html。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310 https://jcp.org/en/jsr/detail?id=310.

The 乔达时间 http://www.joda.org/joda-time/项目,现在在维护模式 https://en.wikipedia.org/wiki/Maintenance_mode,建议迁移到java.time https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/package-summary.html类。

您可以交换java.time对象直接与您的数据库。用一个JDBC驱动程序 https://en.wikipedia.org/wiki/JDBC_driver符合JDBC 4.2 http://openjdk.java.net/jeps/170或稍后。不需要字符串,不需要java.sql.*类。 Hibernate 5 和 JPA 2.2 支持java.time.

从哪里获取 java.time 类?

  • Java SE 8 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_8, Java SE 9 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_9, Java SE 10 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_10, Java SE 11 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_11, and later - Part of the standard Java API with a bundled implementation.
    • Java 9 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_9带来了一些小功能和修复。
  • Java SE 6 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_6 and Java SE 7 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_7
    • 大部分的java.time功能向后移植到 Java 6 和 7三十后端口 http://www.threeten.org/threetenbp/.
  • Android https://en.wikipedia.org/wiki/Android_(operating_system)
    • 更高版本的 Android (26+) 捆绑实现java.time类。
    • For earlier Android (<26), the process of API desugaring https://developer.android.com/studio/write/java8-support#library-desugaring brings a subset of the java.time https://developer.android.com/studio/write/java8-support-table functionality not originally built into Android.
      • 如果脱糖不能提供您所需要的,三十ABP https://github.com/JakeWharton/ThreeTenABP项目适应三十后端口 http://www.threeten.org/threetenbp/(如上所述)到 Android。看如何使用 ThreeTenABP... http://stackoverflow.com/q/38922754/642706.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SimpleDateFormat 解析 2 月 29 日的日期错误 [重复] 的相关文章

随机推荐

  • Javascript:转发带有可变数量参数的函数调用[重复]

    这个问题在这里已经有答案了 我想我需要像红宝石的splat这样的东西 here function foo var result for var i 0 i lt arguments length i result arguments i r
  • 如何将 Azure AD 身份验证添加到现有 ASP.NET MVC 应用程序?

    我有一个使用 Visual Studio 2013 的现有 ASP NET MVC 应用程序 我遵循了此演练 但它在选择时只关注新的新建项目更改身份验证在项目模板中 使用 Windows Azure Active Directory 开发
  • 在ReactJS中显示来自flask send_file函数的图像

    我使用 Flask send file 将图像发送到客户端 如下所示 app route get cut image methods GET def get cut img response make response send file
  • 反向柯里化?

    我想以某种方式组合函数 请考虑伪代码 而不是 F 中的这 2 个函数 F1 x y F2 F1 10 note I did not specify arguments for F1 reverse curry for lack of a b
  • 使用指针功能 - 1 个设备上的 2 个独立应用程序

    我前段时间问过这个问题如何使用主应用程序和引导加载程序中的一项功能 嵌入 https stackoverflow com questions 45459776 how can i use one function from main app
  • 来自图像选择器 swift 3 的 GeoTag 图像

    我想从图像选择器中选择的图像获取地理标记位置 我正在使用这个代码 if picker sourceType UIImagePickerControllerSourceType PhotoLibrary if let currentLat p
  • 根据属性以及 javascript 中的计数对对象数组进行分组

    我有一系列对象说temp 我想根据对象的属性进行分组 例如 应该对性别进行分组 并计算其数量 const temp properties id 1234 gender male status Active properties id 145
  • R 中的 set.seed() 和 .Random.Seed()

    我正在参加模拟课程 但我无法理解 R 中的 Random seed 我知道我们使用 set seed 以便模拟是可重现的 它本质上是我们的 PRNG 的初始值 有人可以向我解释 Random seed 的作用以及它为什么重要吗 例如我什么时
  • 如何允许匿名用户访问 MVC 中的某个给定页面?

    我已在 ASP NET MVC Web 应用程序中启用表单身份验证 我想允许匿名用户仅访问某些特定页面 例如 Register cshtml 通过这样做 我能够允许从我的根 web config 访问我的 CSS 文件
  • Jquery步骤->按钮单击->转到步骤

    我正在使用jquery步骤 http www jquery steps com ASP NET 应用程序中的向导 单击按钮时更改步骤的事件出现问题 file js 中的初始化步骤 var WizardFunc function var wi
  • jquery 文件上传 在一篇文章中发送所有文件

    我正在使用 jquery 文件上传 我在项目中的多个页面中使用它 对于一个项目 我需要在一个请求中上传所有文件 因为我循环遍历所有图像 然后创建并关闭一份档案 我认为一次性发送所有图像比更改服务器端处理程序更快 唯一的问题是 我无法让他们在
  • 在 Windows Sharepoint Services 3.0 中仅编辑拥有的列表项

    有没有办法限制 WSS 3 0 中的 编辑项目 权限 仅允许用户编辑自己的文档或列表项目 我们需要用户能够仅编辑他创建的文档 列表项目 而不是其他人创建的项目 因此 本质上我们需要 EDIT 权限和 ADD 权限的子集 这在 Windows
  • 如何将 csv 添加到 cassandra 数据库?

    我知道这可以用传统方式完成 但是如果我要使用 Cassandra DB 是否有一种简单 快速且灵活的方法将 csv 作为一组键值对添加到数据库中 能够通过 CSV 文件添加时间序列数据是我的首要要求 我可以切换到任何其他数据库 例如 mon
  • JQUERY 如何在拖动时禁用不允许的光标?

    我遇到了不允许的光标问题 拖动 拖动 元素时 出现不允许的光标 我无法再拖动它 我怎样才能防止这种情况发生 我想让我的 拖动 元素在鼠标按下时始终为 绝对 注意 我知道它可能因为 指针事件 而发生 但我需要将它包含在这段代码中 一些代码 d
  • 为 MVC2 AsyncController 构建单元测试

    我正在考虑将我的一些 MVC 控制器重写为异步控制器 我对这些控制器进行了工作单元测试 但我试图了解如何在异步控制器环境中维护它们 例如 目前我有这样的操作 public ContentResult Transaction do stuff
  • Bootstrap 3 Modal:如何使用 jquery/javascript 检查模式是否打开或关闭

    谁能告诉我如何检查 bootstrap 3 0 模式状态 它是使用 jQuery 或 javascript 打开还是关闭 我使用了以下代码 但当您打开模式一次时它会起作用 否则会出现数据未定义错误 if addMemberModal dat
  • 我在 C 中遇到超过时间限制的错误。如何克服它?

    c 性能分析时间限制编写该程序的目的的详细信息在链接上给出 https www spoj com problems CRCLE UI https www spoj com problems CRCLE UI 并且错误超过时间限制 inclu
  • JSF/RichFaces:条件文本样式

    我有一个可以是或否的字符串 在 Java 支持 bean 的对象中实例化 我似乎无法找到根据 JSF 是否从 bean 分别获得 是 或 否 来有条件地将文本设置为红色或绿色的最佳方法 我正在使用 richfaces 但我应该使用
  • 查找包括隐藏和折叠节点的逻辑子节点

    我尝试找到这个问题的答案 在我发现的每一篇文章中都有一个递归查找子项的答案 但它们都不适用于隐藏或折叠的子项 此外 在每一篇文章中 都有人问这是否可能 但没有人回答 所以我开始认为这是不可能的 如果有人有办法做到这一点 我将永远感激不已 我
  • SimpleDateFormat 解析 2 月 29 日的日期错误 [重复]

    这个问题在这里已经有答案了 我有这个有线 public static boolean isFirstDayOfMonth String format String value SimpleDateFormat sdf new SimpleD