SimpleDateFormat 日期格式化,以及sdf.parse(“2022-02-30“)顺序加问题

时间日期标识符:

yyyy:年  
MM:月  
dd:日   
hh:1~12小时制(1-12) 
HH:24小时制(0-23)  
mm:分  
ss:秒   
S:毫秒   
E:星期几  
D:一年中的第几天  
F:一月中的第几个星期(会把这个月总共过的天数除以7)  
w:一年中的第几个星期  
W:一月中的第几星期(会根据实际情况来算)  
a:上下午标识  
k:和HH差不多,表示一天24小时制(1-24)K:和hh差不多,表示一天12小时制(0-11)。 
z:表示时区  

要注意其中的大小写哦,不然会格式化后的日期会很乱的!!!

同时没个字母可以写多个,如:yyyyyyyyyyy。根据你的数大小,根据写的字母的长度,在前面补零。

比如:你要把2022 - 05 - 20 13:14:00这个时间格式化成2022 年 05 月 20 日 13 时 14 分 00 秒

一不小心把格式化日期中时间标识符中的大小写搞错了。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时MM分ss秒");  
写成这样了。最后得到的结果就不对了。
20220520130800

这个MM这里写的是月份的表示。而分钟的表示则是mm。所以要注意

下面是把日期格式化成最全的例子。

		SimpleDateFormat sdf = new SimpleDateFormat("yyyyyyyy-MM-dd HH(hh):mm:ss S E D F w W a k K z");  long times = System.currentTimeMillis();  System.out.println(times);  Date date = new Date(times);  String tim = sdf.format(date);  System.out.println(tim);  

输出的结果:

1654177692374
00002022-06-02 21(09):48:12 374 星期四 153 1 23 1 下午 21 9 CST
SimpleDateFormat sdf = new SimpleDateFormat("现在是yyyy年MM月dd日 HH(hh)时   mm分 ss秒 S毫秒   星期E 今年的第D天  这个月的第F星期   今年的第w个星期   这个月的第W个星期  今天的a k1~24制时间 K0-11小时制时间 z时区");  long times = System.currentTimeMillis();  System.out.println(times);  Date date = new Date(times);  String tim = sdf.format(date);  System.out.println(tim); 

输出结果:

1654177738754
现在是2022060221(09)4858754毫秒   星期星期四 今年的第153天  这个月的第1星期   今年的第23个星期   这个月的第1个星期  今天的下午 211~24制时间 90-11小时制时间 CST时区

标识符表格:

SymbolMeaningPresentationExample
Gera designatorTextAD
yyearNumber2009
Mmonth in yearText & NumberJuly & 07
dday in monthNumber10
hhour in am/pm (1-12)Number12
Hhour in day (0-23)Number0
mminute in hourNumber30
ssecond in minuteNumber55
SmillisecondNumber978
Eday in weekTextTuesday
Dday in yearNumber189
Fday of week in monthNumber2 (2nd Wed in July)
wweek in yearNumber27
Wweek in monthNumber2
aam/pm markerTextPM
khour in day (1-24)Number24
Khour in am/pm (0-11)Number0
ztime zoneTextPacific Standard Time
escape for textDelimiter(none)
single quoteLiteral

simpledateformat的parse默认是弱校验的.

比如说如果你的format为"yyyy-MM-dd" ,输入的字串如果是"2022-02-30"(注意:今年2月份只有28天)能转化正常.

输入的如果是"2022-02-30"则会生成2022-03-02.也就是顺加.

如果希望把"2022-02-30"当做错误格式.则可以设定setLenient(false);

建议加上 以防出错

代码如下

 public static void main(String args[]) throws ParseException {SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");Date parse = sf.parse("2022-02-30");System.out.println(sf.format(parse));}
// 顺序输出
2022-03-02
public static void main(String args[]) throws ParseException {SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");sf.setLenient(false);Date parse = sf.parse("2022-02-30");System.out.println(sf.format(parse));}
// 报错
Exception in thread "main" java.text.ParseException: Unparseable date: "2022-02-30"at java.text.DateFormat.parse(DateFormat.java:366)at com.example.day01.AA.main(AA.java:20)

setLenient用于设置Calendar是否宽松解析字符串,如果为false,则严格解析;默认为true,宽松解析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SimpleDateFormat的线程不安全问题

一、前言 日期的转换与格式化在项目中应该是比较常用的了 一个问题:项目中的日期转换怎么用的?SimpleDateFormat 用过吗?能说一下 SimpleDateFormat 线程安全问题吗,以及如何解决? 回答:平时就是在全局定…

JVM——System.gc、内存溢出、内存泄漏、STW、安全点、安全区域、强软弱虚引用

文章目录①. System.gc()的理解②. 内存溢出(out of Memory)③. 内存泄漏(Memory Leak)④. Stop The World⑤. 多线程中的并行与并发⑥. 垃圾回收的并行、串行、并发⑦. 安全点(Safepoint)⑧. 安全区域(Safe Region)⑨. 引用①. 强引用:不回收②. 软引用: 内存不足即回收③. 弱…

大专生自学java找不到工作_自学Java真的找不到好工作吗?

自学Java真的找不到好工作吗?只能说有点难!虽然职友集数据显示Java开发相关的岗位日招聘量为89754条,全国Java开发工程师的平均薪资为13210元/月。从以上可以看出目前Java行业还远没有饱和,Java开发人才在就业市场也是很吃香&…

Java——ThreadLocal概述、解决SimpleDateFormat出现的异常、内存泄漏、弱引用、remove方法

文章目录①. ThreadLocal简介①. ThreadLocal是什么②. api介绍③. 永远的helloword④. 通过上面代码总结②. 从阿里ThreadLocal规范开始①. 非线程安全的SimpleDateFormat②. 将SimpleDateFormat定义成局部变量(方案一)③. ThreadLocal 解决日期格式乱码问题④. 阿里规范怎么说…

java后端概述_Java后端测试概述

[本文出自天外归云的博客园]多种单测技术1. 要学会Spring MVC/Boot测试中自带的mock方法。2. 学会junit中的方法,对于注解的使用等。3. 学会使用结合第三方Mockito来做mock测试。一些技巧和概念1. 对于复杂方法中,要学会如何拆解逻辑,划分单元…

Java私有方法运用场景_java6-3 封装和private关键字

1、 private:是一个权限修饰符可以修饰成员变量和成员方法被其修饰的成员只能在本类中被访问定义一个学生类:成员变量:name,age成员方法:show()方法2、我们在使用这个案例的过程中,发现了一个问题:通过对象…

JPA入门

文章目录JPA概述JPASpring Data JPAJPA注解基础注解EntityTableIdEnumeratedTransientColumnTemporal联合主键注解IdClassEmbeddable和EmbeddedId注解实体之间关联关系注解OneToOneManyToOne和OneToManyRepositoryJPA查询方式DQM(定义查询方法)使用实例D…

java函数调用约定_2020-09-04:函数调用约定了解么?

福哥答案2020-09-04:初级回答:stdcall和cdecl两者的参数传递顺序都是从右向左。不同点是stdcall在被调用函数 (Callee) 返回前,由被调用函数 (Callee) 调整堆栈。cdecl在被调用函数 (Callee) 返回后,由调用方 (Caller) 调整堆栈&a…

Java实现获取某年某月第一天最后一天

一、某月第一天 /*** 获取某年某月的第一天*/public static String getFisrtDayOfMonth(int year,int month){Calendar cal Calendar.getInstance();//设置年份cal.set(Calendar.YEAR,year);//设置月份cal.set(Calendar.MONTH, month-1);//获取某月最小天数int firstDay cal.…

java xml 读取库_Java开发中读取XML与properties配置文件的方法

相关阅读:1. XML文件:什么是XML?XML一般是指可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。2.XML文件的优点:1)XML文档内容和结构完全分离。2)互操作性强。3)规…

Java8——Stream流操作List排序_List集合中每个对象元素按时间顺序排序

一个学生类的实体类 Data public class Student {private Long id;private String name;private int age;private Double height;public Student(Long id, String name, int age, Double height) {this.id id;this.name name;this.age age;this.height height;}然后我们测…

java线程初始方法三种_Java 多线程 三种实现方式

Java多线程实现方式主要有三种:继承Thread类、实现Runnable接 口、使用ExecutorService、Callable 实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种Callable是带返回值的,返回结果可以从Future中取出来关于Exe…

Java——闰年的判断方法,闰年概念

概念: 闰年分为普通闰年和世纪闰年。 普通闰年是能被4整除但不能被100整除的年份为普通闰年世纪闰年就是能被400整除的为世纪闰年 算闰年的方法很简单,只需要把要计算的年份除以四,如果能够整除,也就是没有小数点,那么这一年就…

java控制层创建websocket_用Java构建一个简单的WebSocket聊天室

前言首先对于一个简单的聊天室,大家应该都有一定的概念了,这里我们省略用户模块的讲解,而是单纯的先说说聊天室的几个功能:自我对话、好友交流、群聊、离线消息等。今天我们要做的demo就能帮我们做到这一点啦!&#xf…

Java中Date与 LocalDateTime ,LocalDate之间的转换

Date与LocalDateTime和LocalDate互相转换思路 Date转LocalDateTime和LocalDate都可以通过Date先转换成Instant然后再转换成LocalDateTime和LocalDate,可以按照下图的方式进行转换。LocalDateTime和LocalDate转换成Date也是以Instant为中介来进行转换的。 1&#xff…

Spring-data-jpa入门(一)

啥是JPA 我这个小白没有听说过,全英文名叫Java Persistence API,就是java持久化api,是SUN公司推出的一套基于ORM的规范。 持久化想必如雷贯耳,都2022年了,谁还不用个持久化框架啊,举起mybatis。 ORM呢&a…

struts单例模式 java_Java单例设计模式详细介绍

Java单例设计模式教程中包含了单例模式的定义、特点以及线路安全等问题。单例模式定义:单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对…

Java8排序 Stream的sorted方法

Java 8 Stream之sorted()排序示例:使用java 8 的流式sorted排序List集合 Stream.sorted 字段排序 功能说明:以自然序或着自定义Comparator 接口排序规则来排序一个流。 功能详细说明: 1、sorted() 默认使用自然序排序, 其中的元素必须实现…

java创建bst树_JAVA生成BST(二叉查找树)树

public class BST> {public Node root; //二叉树的根节点private class Node{private Key key; //键private Node left,right; //指向子树的连接public Node(Key key){this.key key;}}public void insertRec(Key key){root insertRec(root,key);}private Nod…

NetBeans、Eclipse 和 IDEA,哪个才是最优秀的Java IDE?

NetBeans、Eclipse 和 IDEA,哪个才是最优秀的Java IDE? 本文将向您介绍三种流行的Java IDE的基本特点,并比较它们的优缺点。 众所周知,集成开发环境(IDE)能够让程序员的日常编程过程,比起直接在文本编辑器上编写代码要容易得多。…