PRELOADER

当前文章 : 《时间格式化问题》

12/28/2019 —— 

关于时间格式化问题总结:

  • 在现在开发的项目中存在一个是通过年份and其他条件查询的查询方法,在平日里从来没有出现问题,而在2018年12月30日开始就无法查到返回值,一直是空值。我把sql单独摘取出来在数据库查询并没有问题。于是我去查询每一条打印日志,发现了一个问题,前面时间点是2018.12.30但是查询条件截取的却是2019年,检查代码获取时间是new Date() 并没有什么问题,猜想可能是格式化问题。下面是当时格式化的代码:
1
SimpleDateFormat sdf = new SimpleDateFormat("YYYY");

因为平时并没有在意Y和y(平时使用没有区别),从到导致问题的发生。下面说一下Y和y的区别:

  • Y表示Week year
  • y表示 year

Week year的具体意思就是当天所在周隶属的年份,每周都是从周日开始,周六结束,如果本周是跨年周,那么这周就会被计入下一年。下面是2018年12月份日历:
image
我们可以看到12月30日这天所在周正好是跨年周,而且30号还是周日,所以也就发生上面的事情,明明是2018年,截取年份却出现了2019年。

  • 通俗来讲也是说12月30日这天,如果格式化时使用
    1
    SimpleDateFormat sdf = new SimpleDateFormat("YYYY");

sdf.format(new Date()) ====> 2019

如果使用

1
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");

sdf.format(new Date()) ====> 2018

总结

平时我们在格式化时间时请使用 yyyy 格式,尽量不要使用YYYY格式给自己带来不必要的麻烦。