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

學(xué)無(wú)先后,達(dá)者為師

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

項(xiàng)目開(kāi)發(fā)中使用Date和LocalDateTime處理日期

作者:geekmice 更新時(shí)間: 2024-07-15 編程語(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ù)秒精度。

image-20230925110538580

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

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">
      <!--開(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)展示情況

image-20230925111408550

注意事項(xiàng)

默認(rèn)時(shí)間日期格式
image-20230925111548152

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

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">
      <!--開(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)展示情況

image-20230925112642215

總結(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)有了
欄目分類(lèi)
最近更新