在将日期格式化的时候,不注意的话代码中可能同时存在“yyyy-MM-dd”和“YYYY-MM-dd”两种格式,date格式为“YYYY-MM-dd”表示的是周年,date格式为“yyyy-MM-dd”表示的是年。

这两种格式是的功能是完全一样的吗?

先上代码测试一下:

import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;/*** @author *** on 2019-12-30 21:02*/
public class testDate {public static void main(String[] args) {SimpleDateFormat sdfUpperCase = new SimpleDateFormat("YYYY-MM-dd");SimpleDateFormat sdfLowerCase = new SimpleDateFormat("yyyy-MM-dd");Date nowDate = new Date();System.out.println("now = " + nowDate);System.out.println("upperCase nowDate = " + sdfUpperCase.format(nowDate));System.out.println("lowerCase nowDate = " + sdfLowerCase.format(nowDate));System.out.println();LocalDateTime nowTime = LocalDateTime.now();System.out.println("now = " + nowTime);DateTimeFormatter dtfUpperCase = DateTimeFormatter.ofPattern("YYYY-MM-dd");DateTimeFormatter dtfLowerCase = DateTimeFormatter.ofPattern("yyyy-MM-dd");System.out.println("upperCase nowDate = " + nowTime.format(dtfUpperCase));System.out.println("lowerCase nowDate = " + nowTime.format(dtfLowerCase));}
}

结果如下:

now = Tue Dec 31 17:09:22 CST 2019
upperCase nowDate = 2020-12-31
lowerCase nowDate = 2019-12-31now = 2019-12-31T17:09:22.904
upperCase nowDate = 2020-12-31
lowerCase nowDate = 2019-12-31Process finished with exit code 0

显然,结果是不同的。这是为什么呢?

参考了以下两篇文章,梳理一下原因:

year 和 weak year 的区别、JAVA周年问题。

简单解释下:

A week year is in sync with a WEEK_OF_YEAR cycle. 
All weeks between the first and last weeks (inclusive) have the same week year value. 
Therefore, the first and last days of a week year may have different calendar yearvalues.

周年是是按每周更新的;

一年中,第一周和最后一周之间的每周的周年和当时的年份是一致的;

但是第一周和最后一周的周年可能和当时的年份不一致的。

如在2019年12月31日(星期二)这天,年是2019年,但周年就成了2020年。

具体的源码还没有细看,通过这个问题给自己的结论就是:

1、以后日期尽量使用“yyyy-MM-dd”这种格式;

2、后面可以尝试使用Java.time包获取更准确的时间。

Java中【年(year)和周年(week year)】的区别相关推荐

  1. Java中,一切皆是对象——java中的对象类型与基本数据类型的区别

    起因:取一个list给另一个list赋值,然后在另一个list中取出进行修改.list其中类型为对象时,String时,基本数据类型时. [java中的对象类型与基本数据类型的区别] #声明和实例化 ...

  2. java堆和栈 常量池_GitHub - han-guang-xue/difference-of-stack-heap-pool: Java中堆、栈和常量池的区别...

    Java中堆.栈和常量池的区别 栈 堆 常量池的概念 首先我们先了解一下概念,Java把内存分成两种,一种叫做栈内存,一种叫做堆内存. 栈内存 存放基本类型的变量数据和对象类型的引用(请注意存放的是引 ...

  3. Java中Array和ArrayList之间的9个区别

    array和ArrayList都是Java中两个重要的数据结构,在Java程序中经常使用. 即使ArrayList在内部由数组支持,了解Java中的数组和ArrayList之间的差异对于成为一名优秀的 ...

  4. java中的NIO和IO到底是什么区别?20个问题告诉你答案

    摘要:NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多. 本文分享自华为云社区<jav ...

  5. java中list,set,map集合的区别,及面试要点

    Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...

  6. java中*和**的作用 以及 /和/*和/**的区别

    一.java中*和**的作用 "*"就表示了所有的文件,但是"*"并不包括子目录下的文件: "**"匹配包含任意级子目录中所有的文件: 二. ...

  7. 解析java中方法的重载和重写之间的区别与联系

    解析java中方法的重载和重写之间的区别与联系 1 不同点 1.1 方法重写是在不同的类中(父子类),方法重载是在同一类中 1.2 方法重载最初的目的是构造方法的多样化,方法重写的目的是让重写的方法满 ...

  8. java final 变量 回收_java入门教程-Java中final,finally,finalize三个关键字的区别

    final 当这个关键字修饰一个类时,意味着他不能派生出新的子类,也就是说不能被继承,因此一个类不能被同时声明为abstract和final.当final修饰变量或者方法时,可以保证他们在使用中不会被 ...

  9. 浅谈Java中的Set、List、Map的区别

    就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...

  10. Java中抽象类、接口、父类直接的区别与联系

    抽象类与接口的区别: 1)抽象类是一个只有变量或方法申明的类,这些变量(属性)和方法都是抽象类型的.抽象类没有对方法的实现. 2)接口则是一个只有方法申明.没有方法的实现,接口的方法也同样是抽象方法, ...

最新文章

  1. 如何在golang中关闭bufio.reader_Golang 并发模型系列:1. 轻松入门流水线模型
  2. spring使用AOP注解三步曲
  3. 中国移动领取买卖将在2016年破万亿
  4. 关于ABAP高级顾问应该掌握的技术
  5. 在linux怎样删除文件夹里,linux删除文件夹(里头有文件)
  6. 剑指offer面试题[34]丑数
  7. 实操教程 | 深度学习pytorch训练代码模板(个人习惯)
  8. Matlab图像分割(U-Net)
  9. iPhone X (XS XR XSMAX)如何根据状态栏上的图标 获取设备的联网状态(不是单个应用的)
  10. 【夏栀的博客】3月9日零点正式上线
  11. android手机相册多张上传,一键批量上传手机照片到QQ相册功能 节省手机流量
  12. jshop的下载和导入
  13. 余压监控系统在高层住宅楼的应用
  14. 关于emacs字体放大问题
  15. 外部电源和锂电池自动切换电路
  16. Python 常用的标准库以及第三方库有哪些?
  17. 游戏地图和星际争霸地图技术
  18. 北航 2018计算机学院排课,关于2018—2019学年第二学期排课安排的通知
  19. Android xUtils3使用
  20. 对XP系统中Autorun.inf Autorun.exe以及RECYCLER文件夹的认识

热门文章

  1. c语言程序在cmd,在windows命令行编译运行c程序
  2. MySQl 如何实现 FULL JOIN?
  3. 简单介绍 P3P 技术
  4. 使用Docker创建镜像的容器
  5. 用python做一个简单的双色球系统
  6. 常用的linux命令cd,linux常用命令:cd 命令
  7. 寻求合作 - 求职 - 创业 / 有意向的来这里交流一下
  8. 业余条件下制作电路板方法总览
  9. 32位系统处理64位数据
  10. C语言数据类型32位和64位不同