網(wǎng)站首頁 編程語言 正文
文章目錄
- 項目開發(fā)中使用Date和LocalDateTime處理日期
- Date類型驗證
- 數(shù)據(jù)庫表設(shè)計(年月日情況)
- 實體類說明
- 映射文件xml
- 響應(yīng)展示情況
- 注意事項
- LocalDateTime驗證
- 數(shù)據(jù)庫設(shè)計
- 實體類日期類型
- 動態(tài)SQL日期類型
- 響應(yīng)展示情況
- 總結(jié)
項目開發(fā)中使用Date和LocalDateTime處理日期
說明 1、注意數(shù)據(jù)庫表字段日期類型
2、實體類日期類型
3、動態(tài)SQL日期類型
Date類型驗證
數(shù)據(jù)庫表設(shè)計(年月日情況)
》如果存儲年月日時分秒可以使用datetime,timestamp
datetime,timestamp區(qū)別
1.存儲范圍不一致
datetime的存儲范圍是 1000-01-01 00:00:00.000000 到 9999-12-31 23:59:59.999999,而timestamp的范圍是 1970-01-01 00:00:01.000000到 2038-01-19 03:14:07.999999(準備的來講應(yīng)該是UTC范圍);
如果我們存儲timestamp的時候,存了不在它范圍內(nèi)的時間值時,會直接拋出異常。
2.與時區(qū)有關(guān)系否
datetime存儲與時區(qū)無關(guān)(準備來說是datetime只支持一個時區(qū),就是存儲時當前服務(wù)器的時區(qū)),而timestamp存儲的是與時區(qū)有關(guān)。
MySQL在存儲TIMESTAMP時,會先將時間從當前服務(wù)器的時區(qū)轉(zhuǎn)換為UTC(世界協(xié)調(diào)時)以進行存儲,然后查詢時從UTC轉(zhuǎn)換為當前時區(qū)以進行返回。也就是說使用timestamp進行存儲的時間返回的時候會隨著數(shù)據(jù)庫的時區(qū)而發(fā)生改變。而datetime的存儲則與時區(qū)無關(guān),數(shù)據(jù)是什么就存儲什么,也就返回什么。
3.存儲大小
在5.6.4之前,datetime存儲占用8個字節(jié),而timestamp是占用4字節(jié);但是在5.6.4之后,由于這兩個類型允許有小數(shù)部分,所以占用的存儲空間和以前不同;
MySQL規(guī)范規(guī)定,datetime的非小數(shù)部分需要5個字節(jié),而不是8個字節(jié),而timestamp的非小數(shù)部分是需要4個字節(jié),并且這兩個部分的小數(shù)部分都需要0到3個字節(jié),具體取決于存儲值的小數(shù)秒精度。
數(shù)據(jù)庫表腳本
CREATE TABLE `user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_name` varchar(100) DEFAULT NULL,
`birthday` date DEFAULT NULL COMMENT '生日',
`sex` varchar(100) DEFAULT NULL,
`address` varchar(100) DEFAULT NULL,
`insert_time` timestamp NULL DEFAULT NULL,
`update_time` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
實體類說明
用戶實體類
package com.jack.springbootmybatis.pojo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.ToString;
import java.io.Serializable;
import java.util.Date;
/**
* @author PMB
*/
@Data
@ToString
public class User implements Serializable {
private static final long serialVersionUID = 723356122339609354L;
private int id;
private String userName;
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
private Date birthday;
private String sex;
private String address;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date insertTime;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date updateTime;
}
重點關(guān)注字段
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
private Date birthday;
映射文件xml
重點關(guān)注內(nèi)容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jack.springbootmybatis.dao.UserMapper">
<!--開始:查詢所有用戶-用resultmap來接收-->
<resultMap id="getUsersMap" type="User">
<id column="id" property="id" javaType="int"/>
<result column="user_name" property="userName" jdbcType="VARCHAR"/>
<result column="birthday" property="birthday" jdbcType="DATE"/>
<result column="sex" property="sex" jdbcType="VARCHAR"/>
<result column="address" property="address" jdbcType="VARCHAR"/>
<result column="insert_time" property="insertTime" jdbcType="TIMESTAMP"/>
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
</resultMap>
<select id="getUsers" resultMap="getUsersMap" >
select * from user
</select>
<!--結(jié)束:查詢所有用戶-用resultmap來接收-->
</mapper>
響應(yīng)展示情況
注意事項
默認時間日期格式
添加注解@JsonFomat映射日期格式,返回給前端
@JsonFormat(pattern=“yyyy-MM-dd”,timezone = “GMT+8”)
private Date birthday;
LocalDateTime驗證
LocalTime 對應(yīng) time
LocalDate 對應(yīng) date
LocalDateTime 對應(yīng) datetime(timestamp)
數(shù)據(jù)庫設(shè)計
CREATE TABLE `user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_name` varchar(100) DEFAULT NULL,
`birthday` date DEFAULT NULL COMMENT '生日',
`sex` varchar(100) DEFAULT NULL,
`address` varchar(100) DEFAULT NULL,
`insert_time` timestamp NULL DEFAULT NULL,
`update_time` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
重點關(guān)注
insert_time
timestamp NULL DEFAULT NULL,update_time
timestamp NULL DEFAULT NULL,
實體類日期類型
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
private LocalDate birthday;
private String address;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private LocalDateTime insertTime;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private LocalDateTime updateTime;
動態(tài)SQL日期類型
重點關(guān)注內(nèi)容
<result column="insert_time" property="insertTime" jdbcType="TIMESTAMP"/>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jack.springbootmybatis.dao.UserMapper">
<!--開始:查詢所有用戶-用resultmap來接收-->
<resultMap id="getUsersMap" type="User">
<id column="id" property="id" javaType="int"/>
<result column="user_name" property="userName" jdbcType="VARCHAR"/>
<result column="birthday" property="birthday" jdbcType="DATE"/>
<result column="sex" property="sex" jdbcType="VARCHAR"/>
<result column="address" property="address" jdbcType="VARCHAR"/>
<result column="insert_time" property="insertTime" jdbcType="TIMESTAMP"/>
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
</resultMap>
<select id="getUsers" resultMap="getUsersMap" >
select * from user
</select>
<!--結(jié)束:查詢所有用戶-用resultmap來接收-->
</mapper>
響應(yīng)展示情況
總結(jié)
1,時間戳
是指格林威治(地球零時區(qū))時間1970年01月01日00時00分00秒起至現(xiàn)在的總秒數(shù),這個時間戳,在地球的各個地方都是一致的;
2,時區(qū)
由于地球的自轉(zhuǎn),根據(jù)接收太陽光照的順序?qū)⒌厍騽澐殖?4個區(qū),從而方便當?shù)厝说纳a(chǎn)生活,每個時區(qū)相差一小時,可以根據(jù)時間戳和時區(qū)計算當?shù)氐臅r間。格林威治處于零時區(qū),北京處于東八區(qū),因此,北京時間比格林威治時間早8個小時。
3,便捷性
LocalDateTime 比 Date使用起來更為方便,兩者可以相互進行轉(zhuǎn)化。
4、jdk1.8前后對比api
LocalTime 對應(yīng) time
LocalDate 對應(yīng) date
LocalDateTime 對應(yīng) datetime(timestamp)
原文鏈接:https://blog.csdn.net/greek7777/article/details/133270114
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2023-07-08 qt修改默認構(gòu)建路徑
- 2022-12-29 Kotlin數(shù)據(jù)存儲方式全面總結(jié)講解_Android
- 2022-10-02 Python實現(xiàn)遍歷讀取文件或文件夾_python
- 2022-05-17 springcloudgateway轉(zhuǎn)發(fā)websocket異常解決
- 2022-04-09 python中IO流和對象序列化詳解_python
- 2022-09-13 C++?static詳解,類中的static用法說明_C 語言
- 2023-02-10 rust引用和借用的使用小結(jié)_Rust語言
- 2022-05-04 shell腳本配合zabbix實現(xiàn)tomcat的故障自愈功能_linux shell
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支