项目开发中使用Date和LocalDateTime处理日期

文章目录

  • 项目开发中使用Date和LocalDateTime处理日期
    • Date类型验证
      • 数据库表设计(年月日情况)
      • 实体类说明
      • 映射文件xml
      • 响应展示情况
      • 注意事项
    • LocalDateTime验证
      • 数据库设计
      • 实体类日期类型
      • 动态SQL日期类型
      • 响应展示情况
    • 总结

项目开发中使用Date和LocalDateTime处理日期

说明 1、注意数据库表字段日期类型
2、实体类日期类型
3、动态SQL日期类型

Date类型验证

数据库表设计(年月日情况)

》如果存储年月日时分秒可以使用datetime,timestamp

datetime,timestamp区别
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(准备的来讲应该是UTC范围);

如果我们存储timestamp的时候,存了不在它范围内的时间值时,会直接抛出异常。

2.与时区有关系否

datetime存储与时区无关(准备来说是datetime只支持一个时区,就是存储时当前服务器的时区),而timestamp存储的是与时区有关。
MySQL在存储TIMESTAMP时,会先将时间从当前服务器的时区转换为UTC(世界协调时)以进行存储,然后查询时从UTC转换为当前时区以进行返回。也就是说使用timestamp进行存储的时间返回的时候会随着数据库的时区而发生改变。而datetime的存储则与时区无关,数据是什么就存储什么,也就返回什么。

3.存储大小

在5.6.4之前,datetime存储占用8个字节,而timestamp是占用4字节;但是在5.6.4之后,由于这两个类型允许有小数部分,所以占用的存储空间和以前不同;
MySQL规范规定,datetime的非小数部分需要5个字节,而不是8个字节,而timestamp的非小数部分是需要4个字节,并且这两个部分的小数部分都需要0到3个字节,具体取决于存储值的小数秒精度。

image-20230925110538580

数据库表脚本

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;}

重点关注字段

    @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")private Date birthday;

映射文件xml

重点关注内容

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><!--结束:查询所有用户-用resultmap来接收--></mapper>

响应展示情况

image-20230925111408550

注意事项

默认时间日期格式
image-20230925111548152

添加注解@JsonFomat映射日期格式,返回给前端

@JsonFormat(pattern=“yyyy-MM-dd”,timezone = “GMT+8”)
private Date birthday;

LocalDateTime验证

LocalTime 对应 time
LocalDate 对应 date
LocalDateTime 对应 datetime(timestamp)

数据库设计


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;

重点关注

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;

动态SQL日期类型

重点关注内容

<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><!--结束:查询所有用户-用resultmap来接收--></mapper>

响应展示情况

image-20230925112642215

总结

1,时间戳
是指格林威治(地球零时区)时间1970年01月01日00时00分00秒起至现在的总秒数,这个时间戳,在地球的各个地方都是一致的;

2,时区
由于地球的自转,根据接收太阳光照的顺序将地球划分成24个区,从而方便当地人的生产生活,每个时区相差一小时,可以根据时间戳和时区计算当地的时间。格林威治处于零时区,北京处于东八区,因此,北京时间比格林威治时间早8个小时。

3,便捷性
LocalDateTime 比 Date使用起来更为方便,两者可以相互进行转化。

4、jdk1.8前后对比api

LocalTime 对应 time
LocalDate 对应 date
LocalDateTime 对应 datetime(timestamp)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/88211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows10/11显示文件扩展名 修改文件后缀名教程

前言 写这篇文章的原因是由于我分享的教程中的文件、安装包基本都是存在阿里云盘的&#xff0c;下载后需要改后缀名才能使用。 但是好多同学不会改。。 Windows 10 随便打开一个文件夹&#xff0c;在上方工具栏点击 “查看”点击 “查看” 后下方会显示更详细的工具栏然后点…

SPA项目之登录注册--请求问题(POSTGET)以及跨域问题

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于VueElementUI的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.ElementUI是什么 &#x1f4a1;…

ubuntu下用pycharm专业版连接AI服务器及其docker环境

一&#xff1a;用pycharm专业版连接AI服务器 1、首先在自己电脑上新建一个文件夹&#xff0c;后续用于映射服务器上自己所要用的项目文件 2、用pycharm专业版打开该文件夹&#xff0c;作为一个项目打开 3、然后在工具->部署->配置 4、配置中形式如下&#xff1a; 点击左…

Docker 入门 (详细命令讲解)

1.1 容器简介 1.1.1 什么是 Linux 容器 Linux容器是与系统其他部分隔离开的一系列进程&#xff0c;从另一个镜像运行&#xff0c;并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项&#xff0c;因而在从开发到测试再到生产的整个过程中&#xff0…

五、点击切换、滚动切换、键盘切换

简介 通过事件改变当前展示的信息组件,交互的事件有点击上下切换、鼠标轮动上下切换、键盘上下键切换。欢迎访问个人的简历网站预览效果 本章涉及修改与新增的文件:App.vue、public 一、鼠标点击上下箭头切换 <template><div class="app-background"…

Nodejs基于Vue.js编程语言在线学习平台的设计与实现5y4p2

本编程语言在线学习平台是为了提高用户查阅信息的效率和管理人员管理信息的工作效率&#xff0c;可以快速存储大量数据&#xff0c;还有信息检索功能&#xff0c;这大大的满足了用户和管理员这二者的需求。操作简单易懂&#xff0c;合理分析各个模块的功能&#xff0c;尽可能优…

【慕伏白教程】 Linux 深度学习服务器配置指北

文章目录 镜像烧录系统安装系统配置常用包安装 镜像烧录 下载 Ubuntu 镜像 Ubuntu 桌面版 下载烧录工具 balenaEtcher 准备至少 8G 的 空白U盘 开始烧录 系统安装 开机进入BIOS&#xff0c;修改U盘为第一启动 选择 Try or Install Ubuntu 往下拉&#xff0c;选择 中文&a…

Redis 线程模式

Redis 是单线程吗&#xff1f; Redis 单线程指的是 [接收客户端请求 -> 解析请求 -> 进行数据读写操作 -> 发送数据给客户端] 这个过程是由一个线程 (主线程) 来完成的&#xff0c;这也是常说的 Redis 是单线程的原因。 但是 &#xff0c;Redis 程序不是单线程的&am…

OpenCV 实现 SIFT→SURF 算法关键点检测实现

目录 1&#xff0c;SIFT算法原理 1.1&#xff0c;基本流程 1.1.1 尺度空间极值检测 1.1.2 关键点定位 1.1.3 关键点方向确定 1.1.4 关键点描述 1.1.5 总结 1.2 SURF原理 2 代码实现 3 结果展示 4&#xff0c;你肯定会遇到报错 cv2.error: OpenCV(3.4.8) C…

Spring面试题8:面试官:说一说Spring的BeanFactory

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的BeanFactory Spring的BeanFactory是Spring框架的核心容器,负责管理和创建Bean对象。它是一个工厂类,用于实例化、配置和管理Bean的…

nodejs+vue 医院病历管理系统

系统使用权限分别包括管理员、病人和医生&#xff0c;其中管理员拥有着最大的权限&#xff0c;同时管理员的功能模块也是最多的&#xff0c;管理员可以对系统上所有信息进行管理。用户可以修改个人信息&#xff0c;对医院病历信息进行查询&#xff0c;对住院信息进行添加、修改…

权威认可!安全狗获CNVD“漏洞信息报送贡献单位”殊荣

9月24日&#xff0c;国家信息安全漏洞共享平台公布了2022年度CNVD支撑单位年度工作情况及优秀单位个人表彰名单。 作为国内云原生安全领导厂商&#xff0c;安全狗入选漏洞信息报送贡献单位。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;成立于…

tp5连接多个数据库

一、如果你的主数据库配置文件都在config.php里 直接在config.php中中定义db2&#xff1a; 控制器中打印一下&#xff1a; <?php namespace app\index\controller; use think\Controller; use think\Db; use think\Request; class Index extends Controller {public fun…

win10,WSL的Ubuntu配python3.7手记

1.装linux 先在windows上安装WSL版本的Ubuntu Windows10系统安装Ubuntu子系统_哔哩哔哩_bilibili &#xff08;WSL2什么的一直没搞清楚&#xff09; 图形界面会出一些问题&#xff0c;注意勾选ccsm出的界面设置 win10安装Ubuntu16.04子系统&#xff0c;并开启桌面环境_win…

记录下电脑windows安装Tina的过程

下面图片记录windows下安装电路仿真软件Tina的整个过程。 首先肯定下载安装包 然后就一直点下一步下一步 这里随便填一下用户名和公司名称 默认安装位置是C盘&#xff0c;如果C盘空间不够&#xff0c;可以修改安装位置 然后继续下一步下一步 这里不知道什么意思&#xff…

【红日靶场】vulnstack1-完整渗透过程

目录 下载地址红日靶场基本环境配置攻击思维导图网络结构 系统环境配置外网打点对phpmyadmin渗透对zzcms的渗透&#xff1a;getshell失败案例getshell成功案例模版制作&#xff1a;应用导入上传&#xff1a;其他方式&#xff1a; 内网渗透信息收集msf上线&#xff1a;搭建隧道内…

LeetCode刷题

一 螺旋矩阵 题目链接&#xff1a;59. 螺旋矩阵 II - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a;…

算法基础之归并排序

一、归并排序的形象理解 原题链接 示例代码 void merge_sort(int q[], int l, int r) {if (l > r) return;int mid l r >> 1;merge_sort(q, l, mid), merge_sort(q, mid 1, r);int k 0, i l, j mid 1;while (i < mid && j < r) //第一处if (q[i]…

计算机类软件方向适合参加的比赛

前言 博主是一名计算机专业的大三学生&#xff0c;在校时候参加了很多比赛和训练营&#xff0c;现在给大家博主参加过的几个的比赛&#xff0c;希望能给大一大二的学生提供一点建议。 正文 最近也有比赛的&#xff0c;我会从时间线上来给大家推荐一些比赛&#xff0c;并且给…

C/C++程序,从命令行传入参数

C/C中如何让程序接受并处理命令行参数_c 命令行接收--version_饼干叔叔海洋的博客-CSDN博客 #include <stdio.h> #include <stdlib.h>//argc&#xff1a;argument count //argv: arguments vector,参数向量。 //33 777 103 int main(int argc, char **argv){ //…