码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • java中SimpleDateFormat解析日期格式的问题


    图片

    在日常写代码的过程中,我们经常要处理各种格式的日期,常见的日期格式有:“20240601”,“2024-06-01”,“2024-6-1”。如何正确地处理日期格式,尤其是对外接口中参数的日期格式,就很重要了,一个不小心就可能出现意想不到的问题。

    举一个我遇到的真实例子:我们提供的对外接口中有一个参数是日期,定义的格式是“yyyyMMdd”,就是说我们要求用户在调用接口的时候要传“20240601”这样格式的日期,但是,接口提供出去,怎么用就是别人的事了…你会发现经常有用户调用接口的时候,传“2024-06-01”这样格式的日期。如果我们不对格式做校验会出现什么问题呢?

        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        Date d = sdf.parse("2024-06-01");
        System.out.println(sdf.format(d));
    

    你猜上面这段代码的输出是什么?

    是:20231206

    出现的问题就是:用户希望查2024年6月1日的数据,接口返回的却是2023年12月6日的数据。

    如何避免这个问题?我们需要对日期格式做强校验,当用户传的日期格式不是我们希望的日期格式的时候,我们就通过报错来提示用户。

    正好SimpleDateFormat父类DateFormat提供了一个方法:public void setLenient(boolean lenient),这个方法可以控制是否容忍不正确的日期格式,它默认是true,我们需要改成false。就是不容忍错误格式,对格式做强验证。上面的代码可以改成:

        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        sdf.setLenient(false);
        Date d = sdf.parse("2024-06-01");
        System.out.println(sdf.format(d));
    

    再运行上面的代码会抛出异常:Exception in thread “main” java.text.ParseException: Unparseable date: “2024-06-01”

    当然,如果你不需要严格的日期校验,不希望代码抛异常,希望代码运行得更健壮,你就不要加这句:sdf.setLenient(false); 你需要根据实际情况来做决定。

    以上就是我遇到过的SimpleDateFormat解析日期格式的问题。如果你有什么疑问,欢迎留言跟我讨论。


    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    https://wangxuan.me/tech/2024/06/03/validate-date-format-with-SimpleDateFormat.html

  • 相关阅读:
    ETX 高性能远程桌面访问方案在医疗保健保健行业的应用案例
    OBS-Studio-27.2.4-Full-Installer-x64.exe 下载
    【HarmonyOS】鸿蒙传感器采样评率、鸿蒙设置屏幕常亮问题小结
    MySQL索引&事务
    黄石市知识产权示范企业申报条件及奖励政策,2022年申报时间
    批量插入数据,自定义分页器,forms组件,钩子函数,forms组件重要参数,modelform组件
    每天一个数据分析题(三百七十九)- 用户留存
    13.接口自动化学习-Pytest结合Yaml使用
    lodash 深拷贝 去重
    SAR数据的多视Multi-look,包括range looks和azimuth looks,如何设置多视比
  • 原文地址:https://www.cnblogs.com/wang1dao/p/18228347
  • 最新文章
  • 【FHE】我们如何实现同态加密推理(八):SiLU 的密文化——两条路径,和一个 8 字节的开关
    SQLcl 中 c/old/new 替换变量为何失效?先定位再替换
    不让模型写作文,直接从它脑子里读答案:Jev 决策在 .NET 的两条路线
    Halo插件:支持GitHub的图床附件策略
    电视投屏界的“一股清流”!SimpleTVCast 6.0.0-beta 抢先体验:无需TV端App,界面大换血!✨
    华三VXLAN集中式网关实战指南:Spine多活网关 + 双活接入(M-LAG)
    软件更好写之后口碑会更重要
    大 O、大 Omega、大 Theta 的区别,O(n) 复杂度是什么意思
    Java标签跳转:一个鲜为人知但却很实用的小技巧
    多智能体系统论文速读
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号