时间格式转换

场景:前端传来String格式的日期数据data,后端用实体类User接收(其中User实体类有一个时间格式参数Data data)

此时我们要解决各个阶段的格式转换配置:

1、前端到后端:String data  ——转换为——  Data data

2、后端到数据库:

3、后端到前端:Data data   ——转换为——   String  Data

注意:如果不设置的话默认的时间是世界标准世界(0区),而我们中国地区是东8区,相差8个小时。

一、使用@DateTimeFormat+@JsonFormat

1、当使用@DateTimeFormat时

User类:(注意Data要导util包的,别导错包了)

@Data
public class User {
    private int id;
    
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    //@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    private Date data;


}

Controller

@RestController
public class BeanController {

    @PostMapping("data")
    public Map data(@RequestBody User user){
//1、 查看前端到后端处理了格式没有
        System.out.println(user);
//2、查看后端到前端处理了格式没有
        HashMap hashMap = new HashMap();
        hashMap.put("id",user.getId());
        hashMap.put("data",user.getData());
        return hashMap;
    }
}

启动类

@SpringBootApplication
public class DemoApp {

    public static void main(String[] args) {

        SpringApplication.run(DemoApp.class,args);
    }
}

发送请求:

结果:

这是因为@DateTimeFormat只能处理后端到前端阶段(出参),而我们前端到后端的阶段并没有进行处理。所以我们需要加上入参(前端到后端的处理过程)

当然,如果你只需要前端到后端的部分则可以只用@JsonFormat这个注解即可

2、加上@JsonFormat注解

将User实体类改为:

@Data
public class User {
    private int id;
    
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    private Date data;


}

此时重新访问,此时返回处理过的String类型的日期

注意:2020-01-01T03:11:11.000+0000 :以+0000结尾,此时需要加上8个小时(中国时区(东8区)和标准世界时间(0区)的相差8小时)

如果是2020-01-01T03:11:11.000+0800:以+0800结尾,此时表示已经是中国时区(东8区了),则不用再做换算。

此时后端控制台,打印了前端的String转化为Data后的日期值

shuo

此时前后端的日期格式则都设置完成了

这里网上的人可以直接得到一个这样格式的值,而我自己做出来的确是。说实在的不知道是网上的人抄来抄去,还是我自己写错了。这个等我之后再验证

2、使用配置文件进行配置(全局配置)

此时不用@DateTimeFormat+@JsonFormat注解,直接在yml中加上下面配置:

#时间戳统一转换
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

结果:

此时前端传来的和后端传到前端的都是处理好的了,连前端的+8小时的都不用处理了。

3、自定义格式转换器

自定义全局日期转换器可以参考:https://www.jb51.net/article/181873.htm

4、当加入数据库这个环节

4.1、概述

为什么要加入数据库这个环节?

因为数据库的data类型数据也会存在时区的问题。

例如:

jdbc:mysql://localhost:3306/food?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai(东8区,中国的时区)

jdbc:mysql://localhost:3306/food?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC  (0区,世界标准时区)

由于时区问题,查出来的数据是相差8个小时的。后者在数据库拿到数据后会在小时上+8个小时。对于UTC、CST、GTM的概念可以网上百度。

而如果我们设置为Asia/Shanghai中国时区,则插入数据库时不会减掉8个小时,从数据库拿时不会加上8小时。

因为UTC是世界标准时间,而中国时区和标准时间相差8小时,所以这里设置数据库时区在插入查询时会根据不同的时区进行加减8小时(数据库是UTC,而我们项目设置了是GTM+8即中国时区设置为东八区)

所以在和数据库进行日期交互的时候要注意时区问题。

https://blog.csdn.net/baidu_38837718/article/details/104981617

而对于数据库的日期类型:
Mysql中经常用来存储日期的数据类型有三种:Date、Datetime、Timestamp。
【1】Date数据类型:用来存储没有时间的日期。Mysql获取和显示这个类型的格式为“YYYY-MM-DD”。支持的时间范围为“1000-00-00”到“9999-12-31”。
【2】Datetime类型:存储既有日期又有时间的数据。存储和显示的格式为 “YYYY-MM-DD HH:MM:SS”。支持的时间范围是“1000-00-00 00:00:00”到“9999-12-31 23:59:59”。
【3】Timestamp类型:也是存储既有日期又有时间的数据。存储和显示的格式跟Datetime一样。支持的时间范围是“1970-01-01 00:00:01”到“2038-01-19 03:14:07”。

1、数据库中,如果使用datatime类型的日期,这是这个日期是不存储时区信息的,如果需要可以加上时区的字段。

2、data则精度只到年月日没有时分秒

3、Timestamp:和datatime类似,就是范围不同。

4.2、加入数据库后(这里使用配置文件进行配置时间类型的转换)

数据库,建立一个user数据库,字段为id——int ;data——datatime

yml

server:
  port: 10083

#时间戳统一转换
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8   #设置为东八区
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    password: 123456
    url: jdbc:mysql://localhost:3306/food?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
    username: root

mybatis:
  mapper-locations: classpath:mappers/*.xml

pojo:
 

@Data
public class User {
    private int id;

  
    private Date data;

   
}

dao:

@Mapper
public interface UserMapper {

    User Sel(int id);

     int ins(User user);


}

xml:
 

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.spring.dao.UserMapper">


    <select id="Sel" resultType="com.spring.pojo.User">
        select * from user where id = #{id}
    </select>

    <insert id="ins" parameterType="com.spring.pojo.User">
        INSERT INTO user (id,data) VALUES (#{id},#{data})
    </insert>



</mapper>

controller:这里就不写service层了
 

@RestController
public class BeanController {

    @Autowired
    UserMapper userMapper;

    @GetMapping("abc")
    public User usersel(){
        User sel = userMapper.Sel(1);
        return sel;

    }


    @PostMapping("data")
    public Map data(@RequestBody User user){
        userMapper.ins(user);
        System.out.println(user);
        HashMap hashMap = new HashMap<String,Object>();
        hashMap.put("id",user.getId());
        hashMap.put("data",user.getData());
        return hashMap;
    }
}

启动类:

@MapperScan("com.spring.dao") //扫描的mapper
@SpringBootApplication
public class DemoApp {

    public static void main(String[] args) {

        SpringApplication.run(DemoApp.class,args);
    }
}

启动调用

此时插入正常。

此时查询也正常

该案例需要注意的是数据库时区的选择。

先熬半个月
关注 关注
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的Date和时区
halfclear的博客
08-25 9万+
1.Date中保存的是什么在java中,只要我们执行Date date = new Date();就可以得到当前时间。如:Date date = new Date(); System.out.println(date);输出结果是:Thu Aug 24 10:15:29 CST 2017也就是我执行上述代码的时刻:2017年8月24日10点15分29秒。是不是Date对象里存了年月日时分秒呢?不是...
python中有关时间日期格式转换问题
09-18
本篇文章将详细介绍Python中如何进行时间日期格式转换。 1. 字符串化为日期 当我们需要将字符串形式的日期换为日期对象时,可以使用`datetime`模块中的`strptime()`函数。这个函数接受一个日期字符串和对应的...
时间类型
w516285754的博客
09-29 224
时间日期换 //将时间换成String类型 public static String dateToStringAccurateToDay(Date date){ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); return dateFormat.format(date); } //将时间换成
Springboot中如何利用@DateTimeFormat(pattern =“yyyy-MM-dd HH:mm:ss“) LocalDateTime解析前端Vue中el框架中的时间属性
最新发布
2301_76271969的博客
07-30 497
我的时间选择器则只能选择每个月的一号,不能选择其他日期,format格式按照默认即可。placeholder="选择结束时间"<el-form-item label="结束时间:">,若解析成功则会自动在数据中添加一个"T"标识。3.后端解析成功,打印输出数据。
SQL SERVER 日期格式转换详解
09-10
总之,`SQL Server`中的日期格式转换是一个灵活且重要的功能,通过`GETDATE()`获取当前时间,再结合`CONVERT()`函数的不同样式,可以轻松地将日期和时间数据换为各种所需的格式。理解并熟练掌握这些技巧,对于提升...
Java日期格式转换.doc
09-30
日期格式转换是 Java 编程中非常重要的一部分,掌握日期格式转换可以帮助开发者更好地处理日期和时间相关的任务。 结论 ---------- 日期格式转换是 Java 编程中非常重要的一部分,掌握日期格式转换可以帮助开发者...
分享Sql日期时间格式转换
12-15
CONVERT(varchar(10), 时间一, 23) 结果:2007-02-01 /*varchar(10)表示日期输出的格式,如果不够长会发生截取*/ 语句及查询结果: 代码如下:Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelec
时间类型的
weixin_44543308的博客
06-27 912
开发工具与关键技术:VS time 作者:微凉之夏 撰写日期:2019年06月21日 在数据库中我们所创建的数据库中的某些数据中是需要用到时间上的,而时间和日期数据类型代表的是日期和一天内的时间,包括datetime类型和smalldatetime类型,datetime类型是用于存储日期和时间的结合体的数据类型,smalldatetime与datetime类型相似,但其存储的日期时间的范围较小,一...
Java时间日期格式转换
qiotn的专栏
07-08 643
Java时间日期格式转换大全
时间类型
weixin_44546855的博客
07-07 756
作者:HZY 在数据库中,我们常用到的时间数据类型有data,time,datatime,这三种分别是代表,年月日,时分秒,年月日时分秒。这三种类型不能直接在页面显示正确的时间类型。 如下图,分别会显示成这样。这是查询之后被Json序列化之后的结果 data变成了/Data(88000000)/ , time 变成了 object ,datatime也变成了/Data(88000000)/。 我...
Java日期格式转换全攻略
"Java日期格式转换方法的代码示例" 在Java编程中,处理日期和时间是常见的任务,而日期格式的换则是其中的关键部分。Java提供了`java.text.SimpleDateFormat`类来实现日期和时间的格式化和解析。下面的代码段提供...
写文章

分类专栏

  • Mysql 20篇
  • RocketMq 6篇
  • Redis 10篇
  • JVM 8篇
  • 操作系统 4篇
  • 深入了解并发编程 22篇
  • 错误集合 3篇
  • 计算机网络
  • Linux
  • es 4篇
  • RabbitMQ 3篇
  • Netty 1篇
  • SpringCloud 14篇
  • 开发避坑 1篇
  • 分布式 11篇
  • 探花交友改进版
  • 聚合支付项目 1篇
  • 谷粒商城手记 2篇
  • spring源码分析 8篇
  • 容器

最新评论

  • hashmap不安全为何不用hashtable、synchronizedMap?

    偶吃鸡蛋饼: 这俩效率都没有ConcurrentHashMap高

  • 一篇看透Mysql索引及优化

    哈基米,哈基米: explain select (select 1 from actor where id = 1) from (select * from film where id = 1) der; 这么骚?

  • spring(九)-----如何处理配置类上的注解

    清风步月: 您好博主,我看了半天registerBeanDefinitionForImportedConfigurationClass(configClass)这个方法都应该是注册成Bean而不是实例化Bean吧?他这个方法的名字也是注册啊。再者,后面结论中import进来的类也并非在invokeBeanFactoryPostProcessors中实例化啊,要不您在测试一下,又或许是我哪里没弄懂?

  • 项目架构设计

    江湖人称小学生: 您好,这张图,原图可以分享吗

  • spring(四)——————从spring源码角度去解释前面的疑问

    征途黯然.: 图文并茂请解的很清晰透彻,支持优质好文

大家在看

  • Leetcode 每日一题:Diameter of Binary Tree

最新文章

  • 订单正向链路压测
  • Hive(一)
  • Mybatis(十)级联映射与懒加载
2023年26篇
2022年3篇
2021年51篇
2020年130篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家仿真玻璃钢雕塑图片四川景区玻璃钢雕塑生产厂家云南玻璃钢商场美陈雕塑街头景观玻璃钢雕塑小品鄂州商场美陈虹口区镜面玻璃钢雕塑品牌企业商场美陈评分 内容细节制作景观小品玻璃钢龙雕塑曲阳雕塑玻璃钢邯郸玻璃钢仿铜雕塑定制晋城校园玻璃钢景观雕塑定做公仔玻璃钢雕塑销售电话花溪区玻璃钢雕塑厂家电话枣庄卡通玻璃钢雕塑制作玻璃钢仿真马桶雕塑长春玻璃钢雕塑定做玻璃钢雕塑人物价格海南玻璃钢果蔬雕塑成都玻璃钢人物雕塑大同仿铜玻璃钢雕塑生产厂家马鞍山玻璃钢雕塑厂家电话浙江节庆商场美陈报价北海玻璃钢雕塑生产厂家昆明抽象玻璃钢雕塑设计佛山玻璃钢草莓雕塑大型玻璃钢雕塑品牌好定制玻璃钢园林雕塑江苏超市商场美陈批发价阜阳玻璃钢雕塑定做厂家江阴十一商场美陈香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化