MySQL获取日期的相关问题

背景

前面讲了,日期数据是如何存到MySQL数据库的,我们介绍了Date直接存的方式,还介绍了日期字符串直接存的方式,我们说Date类型直接存进去就行,日期字符串需要注意数据库接受的格式要求

当时我们就发现不管存Date还是日期字符串,数据库最终都会将数据转成数据库字段的格式,如date或datetime,最终数据库中的结果就两种,yyyy-MM-dd或yyyy-MM-dd HH:mm:ss

具体可以参考我的这两篇文章

MySQL 保存日期

JAVA SimpleDateFormat

那么现在程序从数据库获取日期数据会是什么样子的呢?

案例

我们结合代码示例总结一下

思路:我们先往数据库存四个字段,分别为两个Date和两个日期字符串如下,然后再从数据库把这四个字段数据获取到,看看它们和原来的区别

import com.example.calender.dto.DateDto;
import com.example.calender.mapper.TestMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Date;
import java.util.List;

@SpringBootTest
public class Test {

    @Autowired
    private TestMapper testMapper;

    @org.junit.jupiter.api.Test
    public void test(){
        DateDto dto = new DateDto();

        //Date
        Date date1 = new Date();
        Date date4 = new Date();
        //yyyy-MM-dd HH:mm:ss
        String date2 = "2022-07-03 00:00:01";
        //yyyyMMdd
        String date3 = "20220908090812";
        dto.setDt(date1);
        dto.setTi(date2);
        dto.setTs(date3);
        dto.setTt(date4);
        System.err.println(date1);
        System.err.println(date4);
        System.err.println(date2);
        System.err.println(date3);

        //插入数据库
        testMapper.insert(dto);

        //查询数据库
        List<DateDto> dtList = testMapper.select();
        for (DateDto ds : dtList) {
            System.err.println(ds.getDt());
            System.err.println(ds.getTt());
            System.err.println(ds.getTi());
            System.err.println(ds.getTs());
        }
    }
}

数据库字段类型

在这里插入图片描述

对于两个Date我们数据库分别用date和datetime来存,日期字符串也是同理

结果

在这里插入图片描述

总结

可以看出如果数据库使用datetime保存Date,那么获取的时候和原来一样,如果数据库使用date保存Date,那么数据库会截取年月日然后保存,获取的时候就只能获取到年月日,其他的为默认;同理,对于日期字符串也是如此,即数据库保存的是什么精度的日期,代码获取的就是什么精度的日期,因此,可能会存在日期精度丢失的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BirdMan98

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值