首页 > 编程语言 >Java强校验日期格式

Java强校验日期格式

时间:2022-11-10 11:58:48浏览次数:41  
标签:年份 Java 校验 SimpleDateFormat DateTimeFormatter year 格式 day

Java强校验日期格式

SimpleDateFormat

// lenient默认为true,即为宽松模式,如需严格校验,则需设置lenient为false
String date = "2021/02/29";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
sdf.setLenient(false);
// 抛错
sdf.parse(date);

DateTimeFormatter

// ResolverStyle默认为SMART,即以聪明的方式解决日期和时间,如需严格校验,设置为STRICT,另外还存在LENIENT宽松模式
String date = "2021/02/29";
DateTimeFormatter df = DateTimeFormatter.ofPattern("uuuu/MM/dd", Locale.getDefault()).withResolverStyle(ResolverStyle.STRICT);
// 抛错
LocalDate.parse(date, df);

在STRICT严格模式下,需注意

在Javadoc节模式用于格式化和解析为DateTimeFormatter它列出了以下3个相关的符号:

Symbol  Meaning        Presentation  Examples
------  -------        ------------  -------
 G       era            text          AD; Anno Domini; A
 u       year           year          2004; 04
 y       year-of-era    year          2004; 04
仅作比较,这些其他符号很容易理解:

 D       day-of-year    number        189
 d       day-of-month   number        10
 E       day-of-week    text          Tue; Tuesday; T
的day-of-year,day-of-month和day-of-week显然是当天在给定范围(年,月,周)内.

因此,year-of-era表示给定范围(时代)内的年份,并且正上方era显示的是示例值AD(当然是其他值BC).

year是签署的年份,年份0是1 BC,年份-1是2 BC等等.

举例说明:朱利叶斯凯撒何时被暗杀?
	公元前44年3月15日(使用模式MMMM d, y GG)
	3月15日-43(使用模式MMMM d, u)
	
当然,区别仅在于年份是零还是负面,而且由于这种情况很少见,大多数人都不关心,即使他们应该这样做.

结论:如果你使用y你也应该使用G.由于G很少使用,因此正确的年份符号u不是y,否则非正年将显示不正确.

这被称为防御性编程:

防御性编程是一种防御性设计,旨在确保在不可预见的情况下软件的持续功能.

注意DateTimeFormatter与SimpleDateFormat以下内容一致:

Letter  Date or Time Component  Presentation  Examples
------  ----------------------  ------------  --------
G       Era designator          Text          AD
y       Year                    Year          1996; 96
负面年份一直是一个问题,他们现在通过添加修复它u.

标签:年份,Java,校验,SimpleDateFormat,DateTimeFormatter,year,格式,day
From: https://www.cnblogs.com/Zzzyyw/p/16876569.html

相关文章

  • java 锁
    1.独占锁,共享锁,2.可重入锁,3.公平锁,非公平锁,4.乐观锁,悲观锁5.互斥锁/读写锁,6.分段锁7.偏向锁/轻量级锁/重量级锁,8.自旋锁锁升级,锁降级synchronized 中有偏向锁,轻......
  • simpread-获取 JavaScript 对象的键 _ D 栈 - Delft Stack
    本文由简悦SimpRead转码,原文地址www.delftstack.com使用Object.keys()方法获取javascript对象的键Object.keys()函数返回一个包含javascript对象键的数组......
  • 记一次多个Java Agent同时使用的类增强冲突问题及分析
    摘要:JavaAgent技术常被用于加载class文件之前进行拦截并修改字节码,以实现对Java应用的无侵入式增强。本文分享自华为云社区《记一次多个JavaAgent同时使用的类增强冲突问......
  • 中文书籍对《人月神话》的引用(20211105更新161-165本):大师品软件、JavaScript开发框架
    ​​中文书籍对《人月神话》的引用(第001到160本)>>​​《人月神话》于1975年出版,1995年出二十周年版。自出版以来,该书被大量的书籍和文章引用,直到现在热潮不退。UMLChina摘录......
  • java :多线程实现的三种方式
    一、并行、串行、并发在了解java中多线程的三种实现方式之前,我们首先需要明白并行、串行、并发三个概念。1.并行:多个CPU同时处理多个任务;2.串行:单个CPU处理多个任务,当一......
  • 高精度加法(Java)
    题目描述高精度加法,相当于a+bproblem,不用考虑负数。输入格式分两行输入。a,b≤ 10^500输出格式输出只有一行,代表a+b 的值。思路使用数组进行模拟,如果......
  • 浅谈性能优化之图片压缩、加载和格式选择
    原文链接:浅谈性能优化之图片压缩、加载和格式选择在认识图片优化前,我们先了解下【二进制位数】与【色彩呈现】的关系。二进制位数与色彩在计算机中,一般用二进制数来......
  • 无法打开调试器端口(127.0.0.1:xxxx): java.net.BindException "Address already
    开启项目突然报错1099端口冲突和debug端口冲突,修改端口号没有用依旧冲突,查看端口进程为空,重新配置tomcat、重启电脑和关闭HyperV无效果。删除C:\Users\用户名\AppData\Lo......
  • 棋盘覆盖(java实现)
    棋盘覆盖问题描述在一个2k×2k个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L......
  • Java对用户使用功能排序
    精确统计页面停留时长介绍页面停留时间(TimeonPage)简称Tp,是网站分析中很常见的一个指标,用于反映用户在某些页面上停留时间的长短,传统的Tp统计方法会存在一定的统计盲区......