日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達者為師

網(wǎng)站首頁 編程語言 正文

項目開發(fā)中使用Date和LocalDateTime處理日期

作者:geekmice 更新時間: 2024-07-15 編程語言

文章目錄

  • 項目開發(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ù)秒精度。

image-20230925110538580

數(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)容

image-20230925113426853

    <?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)展示情況

image-20230925111408550

注意事項

默認時間日期格式
image-20230925111548152

添加注解@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"/>

image-20230925113509664

    <?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)展示情況

image-20230925112642215

總結(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

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新