Java中【年(year)和周年(week year)】的区别
在将日期格式化的时候,不注意的话代码中可能同时存在“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)】的区别相关推荐
- Java中,一切皆是对象——java中的对象类型与基本数据类型的区别
起因:取一个list给另一个list赋值,然后在另一个list中取出进行修改.list其中类型为对象时,String时,基本数据类型时. [java中的对象类型与基本数据类型的区别] #声明和实例化 ...
- java堆和栈 常量池_GitHub - han-guang-xue/difference-of-stack-heap-pool: Java中堆、栈和常量池的区别...
Java中堆.栈和常量池的区别 栈 堆 常量池的概念 首先我们先了解一下概念,Java把内存分成两种,一种叫做栈内存,一种叫做堆内存. 栈内存 存放基本类型的变量数据和对象类型的引用(请注意存放的是引 ...
- Java中Array和ArrayList之间的9个区别
array和ArrayList都是Java中两个重要的数据结构,在Java程序中经常使用. 即使ArrayList在内部由数组支持,了解Java中的数组和ArrayList之间的差异对于成为一名优秀的 ...
- java中的NIO和IO到底是什么区别?20个问题告诉你答案
摘要:NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多. 本文分享自华为云社区<jav ...
- java中list,set,map集合的区别,及面试要点
Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...
- java中*和**的作用 以及 /和/*和/**的区别
一.java中*和**的作用 "*"就表示了所有的文件,但是"*"并不包括子目录下的文件: "**"匹配包含任意级子目录中所有的文件: 二. ...
- 解析java中方法的重载和重写之间的区别与联系
解析java中方法的重载和重写之间的区别与联系 1 不同点 1.1 方法重写是在不同的类中(父子类),方法重载是在同一类中 1.2 方法重载最初的目的是构造方法的多样化,方法重写的目的是让重写的方法满 ...
- java final 变量 回收_java入门教程-Java中final,finally,finalize三个关键字的区别
final 当这个关键字修饰一个类时,意味着他不能派生出新的子类,也就是说不能被继承,因此一个类不能被同时声明为abstract和final.当final修饰变量或者方法时,可以保证他们在使用中不会被 ...
- 浅谈Java中的Set、List、Map的区别
就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...
- Java中抽象类、接口、父类直接的区别与联系
抽象类与接口的区别: 1)抽象类是一个只有变量或方法申明的类,这些变量(属性)和方法都是抽象类型的.抽象类没有对方法的实现. 2)接口则是一个只有方法申明.没有方法的实现,接口的方法也同样是抽象方法, ...
最新文章
- 如何在golang中关闭bufio.reader_Golang 并发模型系列:1. 轻松入门流水线模型
- spring使用AOP注解三步曲
- 中国移动领取买卖将在2016年破万亿
- 关于ABAP高级顾问应该掌握的技术
- 在linux怎样删除文件夹里,linux删除文件夹(里头有文件)
- 剑指offer面试题[34]丑数
- 实操教程 | 深度学习pytorch训练代码模板(个人习惯)
- Matlab图像分割(U-Net)
- iPhone X (XS XR XSMAX)如何根据状态栏上的图标 获取设备的联网状态(不是单个应用的)
- 【夏栀的博客】3月9日零点正式上线
- android手机相册多张上传,一键批量上传手机照片到QQ相册功能 节省手机流量
- jshop的下载和导入
- 余压监控系统在高层住宅楼的应用
- 关于emacs字体放大问题
- 外部电源和锂电池自动切换电路
- Python 常用的标准库以及第三方库有哪些?
- 游戏地图和星际争霸地图技术
- 北航 2018计算机学院排课,关于2018—2019学年第二学期排课安排的通知
- Android xUtils3使用
- 对XP系统中Autorun.inf Autorun.exe以及RECYCLER文件夹的认识