科技通信网站模板下载,网络维护合同,重庆建网站cqiezscom,wordpress自动回复前言
整理Java日期处理遇到过的问题#xff0c;希望对大家有帮助
制作不易#xff0c;一键三连#xff0c;谢谢大家。
1.用 Calendar 设置时间的坑
反例#xff1a; //提供者模式获取实例Calendar calendar Calendar.getInstance();//获取当前时间Date currentDate c…前言
整理Java日期处理遇到过的问题希望对大家有帮助
制作不易一键三连谢谢大家。
1.用 Calendar 设置时间的坑
反例 //提供者模式获取实例Calendar calendar Calendar.getInstance();//获取当前时间Date currentDate calendar.getTime();System.out.println(currentDate currentDate);calendar.set(Calendar.HOUR,10);System.out.println(当前时间加10小时后的时间:calendar.getTime());运行结果
currentDate Sun Feb 19 12:20:03 CST 2023
当前时间加1小时后的时间:Mon Feb 20 00:20:03 CST 2023分析问题
我们设置了 1个小时但运行结果是 00:20:03 并不是预想中的 10:19:49这是为什么 因为 Calendar.HOUR 默认是按 12 小时制处理的需要使用 Calendar.HOUR_OF_DAY因为它才是按 24 小时处理的。
正例
Calendar c Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 10); //Sun Feb 19 10:19:49 CST 20232.Java 日期格式化 YYYY 的坑
反例 //提供者模式获取实例Calendar calendar Calendar.getInstance();//获取当前时间Date currentDate calendar.getTime();SimpleDateFormat simpleDateFormat new SimpleDateFormat(YYYY-MM-dd);System.out.println(2022-12-31 转 YYYY-MM-dd 格式后 simpleDateFormat.format(currentDate));运行结果
2022-12-31 转 YYYY-MM-dd 格式后 2023-12-31问题分析
为什么明明是 2022 年 12 月 31 号转了一下格式就变成了 2023 年 12 月 31 号了 因为 YYYY 是基于周来计算年的它指向当天所在周属于的年份一周从周日开始算起周六结束如果本周跨年那么这一周就算下一年的了。 正确的写法是使用 yyyy 格式。
正例
Calendar calendar Calendar.getInstance();
calendar.set(2022, Calendar.DECEMBER, 31);
Date testDate calendar.getTime();
SimpleDateFormat dtf new SimpleDateFormat(yyyy-MM-dd);
System.out.println(2022-12-31 转 yyyy-MM-dd 格式后 dtf.format(testDate));3.Java日期格式化hh的坑。
反例 String str 2023-03-18 12:00;SimpleDateFormat dtf new SimpleDateFormat(yyyy-MM-dd hh:mm);Date newDate dtf.parse(str);System.out.println(newDate);运行结果
Sat Mar 18 00:00:00 CST 2023问题分析
设置的时间是 12 点为什么运行结果是 0 点呢因为 hh 是 12 制的日期格式当时间为 12 点会处理为 0 点。正确姿势是使用 HH它才是 24 小时制。
正例 String str 2023-03-18 12:00;SimpleDateFormat dtf new SimpleDateFormat(yyyy-MM-dd HH:mm);Date newDate dtf.parse(str);System.out.println(newDate);4.SimpleDateFormat 解析的时间精度问题
反例 SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd);
String time 2023-03;
System.out.println(sdf.parse(time));运行结果 Exception in thread main java.text.ParseException: Unparseable date: 2023-03
at java.text.DateFormat.parse(DateFormat.java:366) at com.example.demo.SynchronizedTest.main(SynchronizedTest.java:19)问题分析
SimpleDateFormat 可以解析长于/等于它定义的时间精度但是不能解析小于它定义的时间精度。
正例 SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM);
String time 2023-03;
System.out.println(sdf.parse(time));5. SimleDateFormat的format 初始化问题
反例 SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd);
System.out.println(sdf.format(20200323));运行结果
1970-01-01返回自1970-01-01 00:00:00 GMT经过的毫秒数。
问题分析
用 format 格式化日期是要输入的是一个 Date 类型的日期而不是一个整型或者字符串
正例 Calendar calendar Calendar.getInstance();
SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd);
System.out.println(sdf.format(calendar.getTime())); //2023-02-206.Calendar 获取的月份比实际数字少 1 即 (0-11)
反例 //获取当前月当前是2月
Calendar calendar Calendar.getInstance();
System.out.println(calendar.get(Calendar.MONTH) calendar.get(Calendar.MONTH));运行结果
calendar.get(Calendar.MONTH) 1问题分析
he first month of the year in the Gregorian and Julian calendarsis JANUARY which is 0;
也就是1月对应的是下标 0依次类推。因此获取正确月份需要加 1。 0-11 月
正例
Calendar calendar Calendar.getInstance();
System.out.println(calendar.get(Calendar.MONTH) (calendar.get(Calendar.MONTH)1));7. Java日期格式化DD的坑
反例
Calendar calendar Calendar.getInstance();
calendar.set(2019, Calendar.DECEMBER, 31);Date testDate calendar.getTime();SimpleDateFormat dtf new SimpleDateFormat(yyyy-MM-DD);
System.out.println(2019-12-31 转 yyyy-MM-DD 格式后 dtf.format(testDate));运行结果
2019-12-31 转 yyyy-MM-DD 格式后 2019-12-365解析
DD 和 dd 表示的不一样DD 表示的是一年中的第几天而 dd 表示的是一月中的第几天所以应该用的是 dd。