首页 > 编程语言 >Java开发手册中为什么要求SimpleDateFormat时用y表示年,而不能用Y

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

时间:2023-06-05 17:23:57浏览次数:38  
标签:12 Java format 时用 SimpleDateFormat 日期 2019

场景

SimpleDateFormat 是 Java 提供的一个格式化和解析日期的工具类。

它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

SimpleDateFormat 使得可以选择任何用户定义的日期 - 时间格式的模式。

在Java中,可以使用SimpleDateFormat的format方法,将一个Date类型转化为String类型,并且可以指定输出格式

        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = sdf.format(date);
        System.out.println(dateStr);

在Java中,可以使用 SimpleDateFormat 的 parse 方法,将一个 String 类型转化成 Date 类型。

 System.out.println(sdf.parse(dateStr));

那么在格式化模式中表示年为什么只能使用yyyy,而不让用YYYY?

注:

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

在格式表达式中,y表示year,而Y表示Week Year。

什么是Week Year?

不同的国家对于一周的开始和结束的定义是不同的。

如在中国,我们把星期一作为一周的第一天,而在美国,他们把星期日作为一周的第一天。

同样,如何定义哪一周是一年当中的第一周?

因为不同人对于日期和时间的表示方法有不同的理解,于是,大家就共同制定了一个国际规范:ISO 8601

国际标准化组织的国际标准 ISO 8601 是日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》。

在 ISO 8601 中。对于一年的第一个日历星期有以下四种等效说法:

 1,本年度第一个星期四所在的星期;

 2,1 月 4 日所在的星期;

 3,本年度第一个至少有 4 天在同一星期内的星期;

4,星期一在去年 12 月 29 日至今年 1 月 4 日以内的星期;

举例:

根 据 ISO 8601 标 准,2019 年 12 月 29 日、2019 年 12 月 30 日、2019 年 12 月 31 日这两天,

其实不属于 2019 年的最后一周,而是属于 2020 年的第一周。

JDK针对ISO8601提供的支持

Java 7 引入了「YYYY」作为一个新的日期模式来作为标识。

使用「YYYY」作为标识,再通过 SimpleDateFormat 就可以得到一个日期所属的周属于哪一年了。

看下面的示例代码

        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sdf2 = new SimpleDateFormat("YYYY");
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy");
        System.out.println(sdf3.format(sdf1.parse("2019-12-30")));//2019
        System.out.println(sdf2.format(sdf1.parse("2019-12-30")));//2020
        System.out.println(sdf2.format(sdf1.parse("2020-01-01")));//2020

后面跟的是输出结果。 

 

标签:12,Java,format,时用,SimpleDateFormat,日期,2019
From: https://www.cnblogs.com/badaoliumangqizhi/p/17458454.html

相关文章

  • java并发
    基础1.并行跟并发有什么区别?从操作系统的角度来看,线程是CPU分配的最小单位。并行就是同一时刻,两个线程都在执行。这就要求有两个CPU去分别执行两个线程。并发就是同一时刻,只有一个执行,但是一个时间段内,两个线程都执行了。并发的实现依赖于CPU切换线程,因为切换的时间特别短,所......
  • java的线程状态
     New新创建创建一个Thread对象,但还未调用start()启动线程时,线程处于初始态。Runnable可运行在Java中,可运行态包括:Ready和RunningReady就绪态该状态下的线程已经获得执行所需的所有资源,CPU只要分配执行权就能运行。所有就绪态的线程存放在就绪队列中。Running运行中已获得CP......
  • java线上问题定位
    获取pidps-ef|grepjava pid下的线程资源占用情况top-Hppid将资源占用高这几个pid转为16进制下载当前的java线程栈查询16进制pid线程情况 java线程栈 jstack-lpid>/1.txt 导出堆快照jmap-dump:live,format=b,file=./heap.hprofpid 查看资源占用最大前30......
  • 1.2 Java基础 数据类型(Integer源码解析)
    Java数据类型和Integer源码解析1.2.1基本数据类型1.2.2什么是拆装箱1.2.3拆装箱是如何实现的1.2.4Integer继承关系1.2.5Integer源码解析1.2.1基本数据类型       如大家所知,Java是一门面向对象的语言,但是java并非完全面向对象,Java中的数据类型分为了       ......
  • 基础必会必考点 Java数组
    Java数组连续存储的元素集合<fontface="楷体">个人认为Java中的数据即C++、C语言相同,一定是连续分配的。笔者在C语言教材找到这样一段话可以证明:Allelementsofaone-dimensionalarrayarealwaysstoredinconsecutivememorylocations.数组定义非初始化:int[]a1;初始化:......
  • 4.3 Java Pipe管道详解
    4.3Pipe       Java管道Pipe是用于线程间通信的,但是需要注意的是,Java中的Pipe是用于一个虚拟机中的线程之间通信的,不能用于进程之间通信。Java管道和Unix/Linux中的管道Pipe的作用是不同的,Unix/Linux中的管道是用于进程之间通讯,是不同Process之间。而Java是同一个虚拟机......
  • 42基于java的图书馆自习室座位预约系统
    本章节给大家带来一个基于java的座位预约系统,可以用于图书馆占位系统,图书馆座位预约系统,大学自习室占座系统,自习室座位预约系统,图书馆预约占座系统,自习室预约占座系统,座位预约系统等等;下面以图书馆为例,大家把源码下载下来后,还可以修改图书馆名字改成自习室或者阅览室占座系统都......
  • Java应用程序和小程序的区别是什么?
    最近正在B站上看动力节点老杜的视频自学Java,整理了这篇文章Java应用程序和小程序的区别,也是新手入门需要了解的,方便大家后续的学习 应用程序是一个独立的Java程序,在客户端或服务器端的虚拟机支持下运行。Java应用程序旨在执行特定功能,以在任何与Java兼容的虚拟机上运行,而不管计......
  • 两个变量交换的四种方法(Java)
     对于两种变量的交换,我发现四种方法,下面我用Java来演示一下。1.利用第三个变量交换数值,简单的方法。(代码演示一下)classTestEV2//创建一个类3{4publicstaticvoidmain(String[]args)5{6intx=5,y=10;//定义两个变量78......
  • 两个变量交换的四种方法(Java)
     对于两种变量的交换,我发现四种方法,下面我用Java来演示一下。1.利用第三个变量交换数值,简单的方法。(代码演示一下)classTestEV2//创建一个类3{4publicstaticvoidmain(String[]args)5{6intx=5,y=10;//定义两个变量78......