背景
前面讲了,日期数据是如何存到MySQL数据库的,我们介绍了Date直接存的方式,还介绍了日期字符串直接存的方式,我们说Date类型直接存进去就行,日期字符串需要注意数据库接受的格式要求
当时我们就发现不管存Date还是日期字符串,数据库最终都会将数据转成数据库字段的格式,如date或datetime,最终数据库中的结果就两种,yyyy-MM-dd或yyyy-MM-dd HH:mm:ss
具体可以参考我的这两篇文章
那么现在程序从数据库获取日期数据会是什么样子的呢?
案例
我们结合代码示例总结一下
思路:我们先往数据库存四个字段,分别为两个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,那么数据库会截取年月日然后保存,获取的时候就只能获取到年月日,其他的为默认;同理,对于日期字符串也是如此,即数据库保存的是什么精度的日期,代码获取的就是什么精度的日期,因此,可能会存在日期精度丢失的情况