網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
文章目錄
- 項(xiàng)目開(kāi)發(fā)中使用Date和LocalDateTime處理日期
- Date類(lèi)型驗(yàn)證
- 數(shù)據(jù)庫(kù)表設(shè)計(jì)(年月日情況)
- 實(shí)體類(lèi)說(shuō)明
- 映射文件xml
- 響應(yīng)展示情況
- 注意事項(xiàng)
- LocalDateTime驗(yàn)證
- 數(shù)據(jù)庫(kù)設(shè)計(jì)
- 實(shí)體類(lèi)日期類(lèi)型
- 動(dòng)態(tài)SQL日期類(lèi)型
- 響應(yīng)展示情況
- 總結(jié)
項(xiàng)目開(kāi)發(fā)中使用Date和LocalDateTime處理日期
說(shuō)明 1、注意數(shù)據(jù)庫(kù)表字段日期類(lèi)型
2、實(shí)體類(lèi)日期類(lèi)型
3、動(dòng)態(tài)SQL日期類(lèi)型
Date類(lèi)型驗(yàn)證
數(shù)據(jù)庫(kù)表設(shè)計(jì)(年月日情況)
》如果存儲(chǔ)年月日時(shí)分秒可以使用datetime,timestamp
datetime,timestamp區(qū)別
1.存儲(chǔ)范圍不一致
datetime的存儲(chǔ)范圍是 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(準(zhǔn)備的來(lái)講應(yīng)該是UTC范圍);
如果我們存儲(chǔ)timestamp的時(shí)候,存了不在它范圍內(nèi)的時(shí)間值時(shí),會(huì)直接拋出異常。
2.與時(shí)區(qū)有關(guān)系否
datetime存儲(chǔ)與時(shí)區(qū)無(wú)關(guān)(準(zhǔn)備來(lái)說(shuō)是datetime只支持一個(gè)時(shí)區(qū),就是存儲(chǔ)時(shí)當(dāng)前服務(wù)器的時(shí)區(qū)),而timestamp存儲(chǔ)的是與時(shí)區(qū)有關(guān)。
MySQL在存儲(chǔ)TIMESTAMP時(shí),會(huì)先將時(shí)間從當(dāng)前服務(wù)器的時(shí)區(qū)轉(zhuǎn)換為UTC(世界協(xié)調(diào)時(shí))以進(jìn)行存儲(chǔ),然后查詢(xún)時(shí)從UTC轉(zhuǎn)換為當(dāng)前時(shí)區(qū)以進(jìn)行返回。也就是說(shuō)使用timestamp進(jìn)行存儲(chǔ)的時(shí)間返回的時(shí)候會(huì)隨著數(shù)據(jù)庫(kù)的時(shí)區(qū)而發(fā)生改變。而datetime的存儲(chǔ)則與時(shí)區(qū)無(wú)關(guān),數(shù)據(jù)是什么就存儲(chǔ)什么,也就返回什么。
3.存儲(chǔ)大小
在5.6.4之前,datetime存儲(chǔ)占用8個(gè)字節(jié),而timestamp是占用4字節(jié);但是在5.6.4之后,由于這兩個(gè)類(lèi)型允許有小數(shù)部分,所以占用的存儲(chǔ)空間和以前不同;
MySQL規(guī)范規(guī)定,datetime的非小數(shù)部分需要5個(gè)字節(jié),而不是8個(gè)字節(jié),而timestamp的非小數(shù)部分是需要4個(gè)字節(jié),并且這兩個(gè)部分的小數(shù)部分都需要0到3個(gè)字節(jié),具體取決于存儲(chǔ)值的小數(shù)秒精度。
數(shù)據(jù)庫(kù)表腳本
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;
實(shí)體類(lèi)說(shuō)明
用戶(hù)實(shí)體類(lèi)
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;
}
重點(diǎn)關(guān)注字段
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
private Date birthday;
映射文件xml
重點(diǎn)關(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">
<!--開(kāi)始:查詢(xún)所有用戶(hù)-用resultmap來(lái)接收-->
<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é)束:查詢(xún)所有用戶(hù)-用resultmap來(lái)接收-->
</mapper>
響應(yīng)展示情況
注意事項(xiàng)
默認(rèn)時(shí)間日期格式
添加注解@JsonFomat映射日期格式,返回給前端
@JsonFormat(pattern=“yyyy-MM-dd”,timezone = “GMT+8”)
private Date birthday;
LocalDateTime驗(yàn)證
LocalTime 對(duì)應(yīng) time
LocalDate 對(duì)應(yīng) date
LocalDateTime 對(duì)應(yīng) datetime(timestamp)
數(shù)據(jù)庫(kù)設(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;
重點(diǎn)關(guān)注
insert_time
timestamp NULL DEFAULT NULL,update_time
timestamp NULL DEFAULT NULL,
實(shí)體類(lèi)日期類(lèi)型
@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;
動(dòng)態(tài)SQL日期類(lèi)型
重點(diǎn)關(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">
<!--開(kāi)始:查詢(xún)所有用戶(hù)-用resultmap來(lái)接收-->
<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é)束:查詢(xún)所有用戶(hù)-用resultmap來(lái)接收-->
</mapper>
響應(yīng)展示情況
總結(jié)
1,時(shí)間戳
是指格林威治(地球零時(shí)區(qū))時(shí)間1970年01月01日00時(shí)00分00秒起至現(xiàn)在的總秒數(shù),這個(gè)時(shí)間戳,在地球的各個(gè)地方都是一致的;
2,時(shí)區(qū)
由于地球的自轉(zhuǎn),根據(jù)接收太陽(yáng)光照的順序?qū)⒌厍騽澐殖?4個(gè)區(qū),從而方便當(dāng)?shù)厝说纳a(chǎn)生活,每個(gè)時(shí)區(qū)相差一小時(shí),可以根據(jù)時(shí)間戳和時(shí)區(qū)計(jì)算當(dāng)?shù)氐臅r(shí)間。格林威治處于零時(shí)區(qū),北京處于東八區(qū),因此,北京時(shí)間比格林威治時(shí)間早8個(gè)小時(shí)。
3,便捷性
LocalDateTime 比 Date使用起來(lái)更為方便,兩者可以相互進(jìn)行轉(zhuǎn)化。
4、jdk1.8前后對(duì)比api
LocalTime 對(duì)應(yīng) time
LocalDate 對(duì)應(yīng) date
LocalDateTime 對(duì)應(yīng) datetime(timestamp)
原文鏈接:https://blog.csdn.net/greek7777/article/details/133270114
- 上一篇:沒(méi)有了
- 下一篇:沒(méi)有了
相關(guān)推薦
- 2022-10-30 Django視圖層與模板層實(shí)例詳解_python
- 2023-02-15 C++在vscode中的多文件編程問(wèn)題解讀_C 語(yǔ)言
- 2022-08-18 win10同網(wǎng)段/跨網(wǎng)段訪問(wèn)虛擬機(jī)samba服務(wù)器的過(guò)程記錄_服務(wù)器其它
- 2022-12-07 C++?類(lèi)this及返回自身對(duì)象的引用方式_C 語(yǔ)言
- 2022-05-29 Linux系統(tǒng)通過(guò)Docker安裝SQL?Server數(shù)據(jù)庫(kù)_docker
- 2022-03-31 C#值類(lèi)型、引用類(lèi)型、泛型、集合、調(diào)用函數(shù)的表達(dá)式樹(shù)實(shí)踐_C#教程
- 2023-11-22 Linux的vim命令如何使用
- 2024-03-08 學(xué)習(xí)基于ssm框架前后端分離實(shí)現(xiàn)注冊(cè)登錄MD5加密的心得體會(huì)
- 欄目分類(lèi)
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支