大厂日期时间处理最佳实践(上)

简介: 大厂日期时间处理最佳实践

1 背景

Java8前,处理日期时间时,使用的“三大件”

  • Date
  • Calender
  • SimpleDateFormat

以声明时间戳、使用日历处理日期和格式化解析日期时间。但这些类的API可读性差、使用繁琐,且非线程安全,如同设计的翔一样的IO,也是Java让人诟病的一大原因。


于是Java8推出全新日期时间类。这些类的API功能强大简便、线程安全。


但毕竟Java8刚出这些类,诸如序列化、数据访问等类库都不支持Java8日期时间类,需在新老类中来回切换。比如,在业务逻辑层使用LocalDateTime,存入数据库或者返回前端的时候还要切换回Date。因此,还不如沿用老的日期时间类。


不过我们生活在最好的时代,基本主流类库都支持新日期时间类型,但还有项目因还是用祖传日期时间类,出现很多古今交错的错误实践。

比如

  • 通过随意修改时区,使读取到的数据匹配当前时钟
  • 直接对读取到的数据做加、减几个小时的操作,来“修正数据”

本文旨在分析古今时间错乱的本质原因,看看使用遗留日期时间类,来处理日期时间初始化、格式化、解析、计算等可能会遇到的问题,以及如何使用新日期时间类解决。

2 初始化日期时间

  • 初始化2020年11月11日11点11分11秒时间,这样可行吗?
  • image.png
  • 日志输出时间是3029年12月11日11点11分11秒
date : Sat Dec 11 11:11:11 CST 3920

这明显是彩笔才会写的垃圾代码,因为

  • 年应该是和1900差值
  • 月应该是 0~11 而非 1~12
  • 时应该是 0~23,而非 1~24
  • image.png
  • 修正上述代码如下:
Date date = new Date(2020 - 1900, 10, 11, 11, 11, 11);
  • 日志输出:
Mon Nov 11 11:11:11 CST 2019

当有国际化需求时,又得使用Calendar类初始化时间。

使用Calendar改造后,初始化时年参数直接使用当前年即可,月0~11。亦可直接使用Calendar.DECEMBER初始化月份,肯定不会犯错。

  • 分别使用当前时区和纽约时区初始化两个相同日期:
  • image.png
  • 日志输出
  • image.png
  • 显示两个不同时间,说明时区发生作用。但更习惯年/月/日 时:分:秒日期时间格式,对现在输出的日期格式还不满意,那就格式化日期时间
目录
相关文章
|
6月前
|
前端开发 定位技术
前端将UTC时间格式转化为本地时间格式~~uniapp写法
前端将UTC时间格式转化为本地时间格式~~uniapp写法
63 0
|
8月前
|
JavaScript 前端开发
如何利用JS获取当前具体日期时间与获取前一天日期时间
在项目中获取当前时间是从后台处理来进行获取的,然后通过ajax请求接口,返回给前端,我也不知道为什么要这么进行,不知道谁写的,暂时先放着吧,供大家观看,后面我会贴出来js获取当前时间的方法。
370 0
|
9月前
|
数据库
PHPExcle导入数据库日期格式转为时间戳的解决方案
PHPExcle导入数据库日期格式转为时间戳的解决方案
117 0
|
10月前
|
存储 Java 程序员
实战:求年月日时间前后遇到的坑和解决方式
这周接到一个时间转换任务需要处理,本来没什么问题,后来完成后发现时间有偏差,又重写了一遍代码,感觉很有记录必要性,希望看过的小伙伴可以避坑。
实战:求年月日时间前后遇到的坑和解决方式
|
关系型数据库 MySQL
开发指南—数据类型—日期和时间类型
本文介绍了PolarDB-X支持的日期时间类型。
|
机器学习/深度学习
开发指南—函数—日期时间函数
本文介绍了PolarDB-X支持的日期时间函数
|
Java 数据库
大厂日期时间处理最佳实践(下)
大厂日期时间处理最佳实践
226 0
大厂日期时间处理最佳实践(下)
|
Python
Python 技术篇-按任意格式灵活获取日期、时间、年月日、时分秒。日期格式化。
Python 技术篇-按任意格式灵活获取日期、时间、年月日、时分秒。日期格式化。
629 0
|
canal 消息中间件 存储
Canal监听MySQL Binarylog消费实践
在MySQL作为如今最为主流使用的数据库背景下,除了常规的数据存储使用场景,还存在大量的使用需求,如:数据自动同步,数据更新监听等场景。由于数据库层面的增量数据变动无法依靠应用服务层面进行有效感知,因此,还是需要从数据库自身提供的机制入手进行实现处理。下面为将展示关于如何借助Canal实践解决场景的几个业务场景问题
|
前端开发 JavaScript Unix
前端国际化时间日期概述与业务实践
在做国际化项目的时候,时间日期是绕不过的槛,哪我们就一起来了解一下前端国际化时间日期和业务中的实践。
3861 1