首页 > 编程语言 >Java中SimpleDateFormat时YYYY与yyyy以及HH和hh的区别注意踩坑

Java中SimpleDateFormat时YYYY与yyyy以及HH和hh的区别注意踩坑

时间:2024-01-25 15:33:48浏览次数:35  
标签:2024 12 Java format System SimpleDateFormat yyyy hh println

场景

Java开发手册中为什么要求SimpleDateFormat时用y表示年,而不能用Y:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131052335

在使用SimpleDateFormat在获取当前日期时因使用了YYYY导致20231231这个日期被格式化为20241231

这里推荐在日期处理时统一使用封装工具类并指定格式化格式,避免在业务代码中失误写错。

在Java中的SimpleDateFormat类中格式化日期时,YYYY和yyyy之期存在细微的差异。

它们都代表一年,但是yyyy代表日历年份,而YYYY代表星期,基于周的年份。

这是一个细微的差异,通常情况下,两者的结果是相同的,但在跨年的第一周或最后一周可能会有差异。

y:year,表示“年”,基于天的年

Y:week year ,表示“周年”,基于周的年

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi

实现

1、比如执行如下代码

        String date="2023-12-31";
        SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
        Date d = dt.parse(date);
        SimpleDateFormat dateFormatY = new SimpleDateFormat("YYYY-MM-dd");
        SimpleDateFormat dateFormaty = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println(dateFormatY.format(d));//2024-12-31
        System.out.println(dateFormaty.format(d));//2023-12-31

一个会是2024,一个会是2023

 

这是因为20231231在周年计算方式中为2024年的第一个周的开始(周末为一周的开始)

2、为了验证,再找2024年的跨年时间进行验证

        date="2024-12-29";
        Date d3 = dt.parse(date);
        System.out.println(dateFormatY.format(d3));//2025-12-29
        System.out.println(dateFormaty.format(d3));//2024-12-29

        date="2024-12-28";
        Date d4 = dt.parse(date);
        System.out.println(dateFormatY.format(d4));//2024-12-28
        System.out.println(dateFormaty.format(d4));//2024-12-28

这是因为24年的1228为24年的最后一周,而241229为25年的第一个周。

 

3、同理在使用HH与hh时也要注意区别

HH代表24小时制

hh代表12小时制

        SimpleDateFormat dateFormatH = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat dateFormath = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        System.out.println(dateFormatH.format(new Date()));//当前时间为上午 2024-01-25 11:33:24 当前时间为下午 2024-01-25 16:34:24
        System.out.println(dateFormath.format(new Date()));//当前时间为上午 2024-01-25 11:33:24 当前时间为下午 2024-01-25 04:34:24

可通过修改当前时间为上午还是下午进行验证。

标签:2024,12,Java,format,System,SimpleDateFormat,yyyy,hh,println
From: https://www.cnblogs.com/badaoliumangqizhi/p/17987268

相关文章

  • java线程数量如何确定
    1.概述使用线程池的好处降低资源消耗:线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,通过重复利用己创建的线程可以降低线程创建和销毁造成的消耗。提高响应速度:当任务到达时,可以不需要等待线程创建就能立即执行提高线程的可管理性:线程池提......
  • java线程池-2
    1.Executors创建线程池的潜在问题在很多公司的编程规范中,非常明确地禁止使用Executors创建线程池。为什么呢?这里从源码讲起,介绍使用Executors工厂方法创建线程池将会面临的潜在问题。1.1Executors创建固定数量的线程池的潜在问题使用newFixedThreadPool工厂方法固定数......
  • 2024年1月Java项目开发指南4:IDEA里配置MYSQL
    提前声明:文章首发博客园(cnblogs.com/mllt)自动“搬家”(同步)到CSDN,如果博客园中文章发生修改是不会同步过去的,所以建议大家到我的博客园中查看前提条件:1.你已经设计好了数据库,并成功创建了数据库。2.你的springboot项目中已经配置好了MySQL的连接。填写好信息后点测试连......
  • JavaScript 中 eval() 函数
    JavaScript的eval()函数的作用是将一个字符串作为脚本代码进行解析和执行。它可以动态地执行字符串中的JavaScript代码,并返回执行结果。eval()函数可以用于执行任何有效的JavaScript代码,包括声明变量、定义函数、执行表达式等。eval()函数的语法如下:varformArray=$('#formRec......
  • Java 中 float 与 double 的区别
    1.float是单精度浮点数,内存分配4个字节,占32位,有效小数位6-7位double是双精度浮点数,内存分配8个字节,占64位,有效小数位15位 2.java中默认声明的小数是double类型的,如doubled=4.0如果声明:floatx=4.0则会报错,需要如下写法:floatx=4.0f或者floatx=(float)4.0其中4.0f后......
  • HTTP连接池在Java中的应用:轻松应对网络拥堵
    网络拥堵是现代生活中无法避免的问题,尤其是在我们这个“点点点”时代,网页加载速度直接影响到我们的心情。此时,我们需要一位“救世主”——HTTP连接池。今天,就让我们一起探讨一下,这位“救世主”如何在Java中大显神通。首先,我们要明白,什么是HTTP连接池?简单来说,它就像一个“连接银行”......
  • 使用Java中的OkHttp库进行HTTP通信:快速、简单且高效
    在Java的世界里,进行HTTP通信的方式多种多样。其中,OkHttp以其简单、高效和强大的功能受到了开发者的广泛欢迎。今天,我们就来深入探讨如何使用OkHttp库在Java中进行HTTP通信。首先,OkHttp是一个基于HTTP/2和SPDY的客户端,提供了现代且高效的通信方式。它不仅支持同步请求和异步请求,还提......
  • java常用集合
    java集合,也叫作容器,主要是由两大接口派生而来:一个是Collection接口,主要用于存放单一元素;另一个是Map接口,主要用于存放键值对。对于Collection接口,下面又有三个主要的子接口:List、Set和Queue。Map主要实现类HashMap,LinkHashMap,HashTable,TreeMapList主要实现类Arra......
  • java中双指针算法(快指针与慢指针)
    双指针法:设置两个指针,分别是快指针和慢指针,分别是i和j。  设置一个变量temp用来储存第一个数据nums[0] 过程:1.nums[0]  temp  他们两个相等  那么temp不需要改变,i=i+1,j变,i=1,j=1   2.nums[i=1],temp  他们两个相等,temp不变,i=i+1,j不......
  • 「Java开发指南」MyEclipse如何支持Spring Scaffolding?(二)
    在上文中(点击这里回顾>>),主要为大家介绍了使用Spring的Scaffolding应用程序,本文将继续讲解CRUDScaffolding。MyEclipsev2023.1.2离线版下载MyEclipse技术交流群:742336981欢迎一起进群讨论2.CRUDScaffoldingScaffolding指的是MyEclipse广泛代码生成功能的超集,从生成一组特......