1. 相应的业务场景

1.1 场景简介

正值2019年末,2020年初之际,系统日期时间为2019/12/31而系统报表却出现了2020/12/31的日期。

1.2 代码案例如下

2.Java中YYYY与yyyy的含义

2.1 时间字母含义表

2.2 Y的Week Year含义

Y代表的事Week Year,表示当天周所在的年份。这种方式将会将一年划分为52周或者事53周(类似闰年,每隔几年会增加一周)。Week Year的每周仅仅属于某一年,如果某年的第一周或者最后一周跨年,就会导致部分日期年份与实际不符合。

2.3 Week Year的两种标准

  • ISO 8601:国际标准,每周从一开始,每年的第一周至少包含 4 天
  • Common:通用标准,每周从周日开始,每年的第一周至少包含 1 天

注:Calendar 对象可以通过 setFirstDayOfWeek 与 setMinimalDaysInFirstWeek 改变上面默认标准

Java 将会根据系统环境变量决定使用哪种标准,可以通过设置 Locale 改变方式。代码如下:

// 选择 20191229 这一天
Date date20191229 = DateUtils.parseDate("20191229", "yyyyMMdd");
// 将会输出 2020,使用 Common 。当前系统,Locale 默认值为 Locale.CHINA
System.out.println(DateFormatUtils.format(date20191229,"YYYY"));
// 将会输出 2019,使用 ISO 8601
System.out.println(DateFormatUtils.format(date20191229,"YYYY", Locale.FRANCE));

2.4 ISO 8601 标准之最后一周跨年以及第一周跨年的例子:

ISO8601
2015 年最后一周跨年,2016 前三天使用 YYYY 最后结果为 2015,时间看起来被回退了 2020 年第一周跨年,2019 年最后两天使用 YYYY 结果为 2020

3. 常用的日期格式

下面以 2019-12-31 06:06:06:666 时间为例

Letter 含义 Example
Y Week Year YYYY—>2020
y yyyy——>2019
M MM——>12
m mm——–>06
D 一年中天数 DD——–>365
d 一月中的天数 dd———>06
H 小时(0-23) HH———>06
h 小时(1-12) hh———>06
S 毫秒 SSS———>666

总结:

  • 第一,切记 YYYY 与 yyyy区别,年份最好统一使用 yyyy
  • 第二,可以使用阿里的 Alibaba Java Coding Guidelines 插件,这个插件可以检测出使用 YYYY 的代码
  • 第三,阅读完整文档,消除 Bug 最好的的办法就是阅读完整的文档

帮助:

1. week_year

2. Serious Security: The decade-ending “Y2K bug” that wasn’t

3. ISO week date_wiki

4. Difference between year-of-era and week-based-year?

转载地址:http://www.justdojava.com/

时间格式区别之YYYY/MM/dd HH:mm 与 yyyy/MM/dd HH:mm相关推荐

  1. Java时间格式保存出错处理:java.util.Date,typeMismatch

    Field error in object 'role' on field 'createDatetime': rejected value [2021-02-19 11:38:38]; codes ...

  2. vue中通过monment.js插件来将时间戳转换为常用的时间格式

    vue中通过monment.js插件来将时间戳转换为常用的时间格式 在项目中很多时候需要展示时间信息,我们一般都是用时间戳来传输时间信息,但是我们在页面展示的话是我们想要的常见格式,比如:2021-4 ...

  3. java 时间格式“yyyyMMddHHmmssSSSSSS”的解释

    一.背景   因近期对接第三方接口时,涉及到多种时间格式,因此记录一下时间格式中的相关含义. 二.时间格式解释 字母 日期或时间元素 表示 示例 G Era 标志符 Text AD y 年 Year ...

  4. ISO-8601及GMT时间格式

    1.ISO-8601时间格式:1 public static final String ISO_8601 = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"; 202 ...

  5. 中国地区“MMM dd, yyyy HH:mm:ss a“的时间格式问题

    我们先来看以下代码: public class test {private final static DateTimeFormatter dtf1 = DateTimeFormatter.ofPatt ...

  6. vue3时间格式转换为yyyy/mm/dd,yyyy-MM-dd,yyyy-MM-dd hh:mm:ss,hh:mm,yyyy-MM-ddThh:mm:ss+08:00

    时间格式转换为yyyy/mm/dd export const dateFormat1 = (time = new Date().getTime()) => { //YYYY/MM/DDconst ...

  7. NET问答: 为什么时间格式 dd/MM/yyyy 转成 DateTime 会报错?

    咨询区 Shantanu Gupta: 我在项目中碰到了一个需求,需要将字符串格式的 dd/MM/yyyy 转成 DateTime,比如下面这样: class Program{static void ...

  8. 自定义jackson解析时间格式yyy-MM-dd HH:mm:ss

    原文:https://my.oschina.net/xpx/blog/1924695 一.问题排查 1.出现的场景 1)服务端通过springmvc写了一个对外的接口,返回一个json字符串,其中该j ...

  9. [乐意黎原创] 时间格式 yyyy-MM-dd‘T‘HH:mm:ss.SSSZ 中的T和Z表示什么

    1. 事情起因: 本人这久在关注一个地方域名( ***.ren,由于某些因素,此处用 *** 来代表域名), 因域名已经过期,有打算抢注的意愿,就等域名注册机构删除后我来抢注册了. ( ***.ren ...

最新文章

  1. 转:设置session过期时间
  2. 禁用引导模态区域之外的单击以关闭模态
  3. Mac OS Terminal 几个快捷键
  4. Android开发环境简单配置
  5. python文件中环境声明_Python环境构建
  6. OPA 3 - thirdParty Qunit.js and IFrame load logic
  7. 服务器无法在发送 http 标头之后设置内容类型。_python socket编程预知内容
  8. windows下使用boost安装教程vs2015
  9. wnoise matlab,MATLAB中用wnoise函数测试去噪算法
  10. SxSW小组成员讨论了Valley调查中的Elephant
  11. Linux下Eclipse给工程配置(附加库目录)
  12. 2015/7/24 (等待回调,结果是盘中回调,盘末拉升,错过了进仓机会吗?详情进入...
  13. Matlab2016a安装libsvm
  14. 使用 iPerf 测试路由器局域网性能
  15. 批处理删除文件夹下所有文件和文件夹
  16. 证件照更换背景 裁剪尺寸 智能图片放大 照片 证件照大师
  17. 最短路径系列【最短路径、哈密顿路等】
  18. Word 模板渲染引擎-Poi-tl
  19. 边框颜色和背景色之间的关系
  20. 中文散步的时候,发现枫叶开始红了

热门文章

  1. android telephony概述
  2. Python获取熊猫TVLOL栏所有主播信息以及人气排名
  3. 原来404页面可以这样做【转】
  4. 计算机系统的组成观评课报告,观评课报告
  5. 3d真人手办摄影拍照3d建模设备详细研发文档
  6. vue 深度监听watch(如何watch监听一个对象内部的变化)
  7. java毕业设计毕业生派遣系统Mybatis+系统+数据库+调试部署
  8. 期权的隐含波动率—python方法求解
  9. 2021 年最佳 JavaScript 框架排名
  10. Altium Designer19中按空格键不能旋转元件的问题