首页 > 其他分享 >线上关于SimpleDateFormat踩坑记录

线上关于SimpleDateFormat踩坑记录

时间:2024-03-15 22:45:13浏览次数:22  
标签:java 记录 text SimpleDateFormat isValidDate 线上 false TestSimpleDateFormat

问题描述

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class TestSimpleDateFormat {
    public static void main(String[] args) {
        System.out.println(isValidDate("0229", "MMdd"));//false
        System.out.println(isValidDate("0228", "MMdd"));//true
        System.out.println(isValidDate("20230229", "yyyyMMdd"));//false
        System.out.println(isValidDate("20240229", "yyyyMMdd"));//true
    }

    public static boolean isValidDate(String str, String formatStr) {
        boolean convertSuccess = true;
        SimpleDateFormat format = new SimpleDateFormat(formatStr);
        try {
            // 严格模式
            format.setLenient(false);
            format.parse(str);
        } catch (ParseException e) {
            convertSuccess = false;
            e.printStackTrace();
        }
        return convertSuccess;
    }
}

报错信息为

java.text.ParseException: Unparseable date: "0229"
	at java.text.DateFormat.parse(DateFormat.java:366)
	at com.imooc.TestSimpleDateFormat.isValidDate(TestSimpleDateFormat.java:21)
	at com.imooc.TestSimpleDateFormat.main(TestSimpleDateFormat.java:8)

如果当前年份为闰年,日期为2月29号,但是我们要校验的格式不包含年份,那么 SimpleDateFormat 就识别不了闰年,就会将 2月29 当作一个无效日期。

解决方法

  1. 去掉严格模式,这样 SimpleDateFormat 就不校验日期是否真正有效了,只校验格式。
  2. 加上年份,这个 SimpleDateFormat 就可以识别闰年了

标签:java,记录,text,SimpleDateFormat,isValidDate,线上,false,TestSimpleDateFormat
From: https://www.cnblogs.com/strongmore/p/18048527

相关文章

  • 2024-03-15 leetcode写题记录
    目录2024-03-15leetcode写题记录32.最长有效括号题目链接题意解法42.接雨水题目链接题意解法动态规划双指针2024-03-15leetcode写题记录32.最长有效括号题目链接32.最长有效括号题意给你一个只包含$'\((\)'和'\()\)'的字符串,找出最长有效(格式正确且连续)括号子串的......
  • WSL 修复同步记录
    WSL修复同步记录wsl--unregisterUbuntuwsl--install---$sudosu#cp/etc/apt/sources.list/etc/apt/sources.list.bak---https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/---#vim/etc/apt/sources.list#aptupdate#aptupgrade-y#aptinstalllanguag......
  • 记录学生的姓名、编号以及总分,输入n,代表学生个数,要求用结构体泡排序将学生信息按学生
    //记录学生的姓名、编号以及总分,输入n,代表学生个数,要求用结构体,//用冒泡排序将学生信息按学生总分从低到高排名,将学生信息打印出来;//并输入一个总分x,用折半查找查找所有总分为x的学生,并将学生信息打印出来#include<stdio.h>#include<stdlib.h>structStudent{ ch......
  • 6. 活动记录 | 2. Tiger 编译器的栈帧
    静态链 静态链:调用函数f()时,传递给f()一个指针,指向静态包含f()的那个函数g(){  ...  //调用f()时,传递g()的指针    f(){...}}  静态包含:在编译器的上下文中,"静态包含"(StaticInclusion)通常指的是在编译时直接将一个源文件的内容......
  • 6. 活动记录 | 1. 栈帧
     tips 栈栈指针帧帧指针 Frame模块:栈帧相关信息 F_frame       :   栈帧F_access      :  表示寄存器/栈帧的地址偏移,即位置SymbolTemp_label     :  标识符    F_newFrame(label,boolList)  :......
  • 一体机 配置记录2024
    用于数据采集  鲁大师详细报表软件版本鲁大师6.1024.3970.311模块版本5.1024.1705.130检测时间2024-03-1518:48:12官方网站http://www.ludashi.com概览电脑型号X64兼容台式电脑操作系统Windows10专业版64位(Version21H2/DirectX12)处理器英特尔第三代酷......
  • 工作中遇到的tab提升问题,简单记录一下
    Tabenhancement;应用场景当tab足够多时,进行Tab功能提升。由上图实现下图。前期css简单处理下,例如:tab最大宽度,tab超出文本省略号。开始处理逻辑:当tab不够多不足以出现滚动条时:此时也不需要过多的逻辑,只有删除tab后的选中逻辑;当tab足够多足以出现滚动条时:我们新建一个......
  • 2024-03-14 leetcode写题记录
    目录2024-03-14leetcode写题记录829.连续整数求和题目链接题意解法2024-03-14leetcode写题记录829.连续整数求和题目链接829.连续整数求和题意给定一个正整数\(n\),返回连续正整数满足所有数字之和为\(n\)的组数。示例1:输入:n=5输出:2解释:5=2+3,共有两......
  • 超轻量级的c#版基于文件的日志记录工具,可定制输出格式,可指定日志文件
    这是我自己个人编写的日志记录,主要使用在只需要记录日志,偶尔到文件中查看一下日志记录的情况。我自己写的一些服务之类的是使用了这个的,代码很少,使用很简单。第一步搜索和安装我的Nuget包搜索和安装zmjtool这个包,我写的,如下图:第二步引入namespace和创建logger对象1/**引......
  • 记录一次 nginx 代理调试 ie7
    worker_processes1;events{worker_connections1024;}http{includemime.types;default_type"text/html;charset=utf-8";sendfileon;keepalive_timeout65;server{listen80;server_namelocalh......