一般我在项目中导入需要的包,大部分情况下都会根据IDE的提示自动导入默认的包,少数情况下会扫一眼,看看是不是需要的包,极少情况会斟酌一下,确认一下这就是需要的包。
最近在项目中导入JDK中的Date包时,在后来回看代码的时候,发现不同的类中导入的Date依赖包还不太一样,也是那个时候才发现Date在俩不同的包中。之前没有注意过这个问题,那这俩包中的日期有什么联系与区别呢?


区别与联系:

首先查看Api,发现java.sql.Date是java.util.Date的子类。

这三个类都是对应于jdbc处理日期格式的类,只是有着不同的日期精度和格式。

java.sql.Date类:

一个包装了毫秒值的瘦包装器 (thin wrapper),它允许 JDBC 将毫秒值标识为 SQL DATE 值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数。
  为了与 SQL DATE 的定义一致,由 java.sql.Date 实例包装的毫秒值必须通过将小时、分钟、秒和毫秒设置为与该实例相关的特定时区中的零来“规范化”。
  【以上来官方api】
简要的说: 日期格式“规范化”的java.sql.Date只包含年月日信息,时分秒毫秒都会清零。格式类似:YYYY-MM-DD。当我们调用ResultSet的getDate()方法来获得返回值时,java程序会参照"规范"的java.sql.Date来格式化数据库中的数值。因此,如果数据库中存在的非规范化部分的信息将会被截取。 也就是说,如果是 2020-12-05 15:15:25 这样的时间点存取数据,那么存在数据库中的值就是:2020-12-05 00:00:00
类型转换: 如果把java.sql.Date值通过PrepareStatement的setDate方法存入数据库时,java程序会对传入的java.sql.Date规范化,非规范化的部分将会被劫取。然而,我们java.sql.Date一般由java.util.Date转换过来,如:java.sql.Date sqlDate=new java.sql.Date(new java.util.Date().getTime()). 显然,这样转换过来的java.sql.Date往往不是一个规范的java.sql.Date.要保存java.util.Date的精确值, 需要利用java.sql.Timestamp.



时间显示格式:


【父类】java.util.Date日期格式为:年月日时分秒
【子类】java.sql.Date日期格式为:年月日[只存储日期数据不存储时间数据]
【子类】java.sql.Time日期格式为:时分秒
【子类】java.sql.Timestamp日期格式为:年月日时分秒纳秒(毫微秒)

四种对象内部均使用系统时间作为标准数据 :

·系统时间:自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数,即格林尼治标准时间(GMT)
·本地时间:根据时区不同打印出来的时间[当时区为GMT+0时,系统时间与本地时间相同]
我们使用的是以本地时间为参考标准的

针对不同的数据库选用不同的日期类型 :

需要了解数据库里存储时间的精度。

Date类处理。基本上,数据库通常至少支持三种日期时间字段的形式,即日期、时间和时间戳。在jdbc和它们中的每一个java.util.Date..这三种语言的快速语义如下:java.sql.Date对应于sql日期,这意味着它存储年月日当小时、分钟、秒和毫秒被忽视了。java.sql.Time对应于sql time,只包含以下信息:小时、分钟、秒和毫秒.java.sql.Timestamp对应于SQL时间戳,该时间戳的确切日期为纳秒(util.Date只支持毫秒!)具有可定制的精度。与这三种类型相关的使用JDBC驱动程序时最常见的错误之一是,这些类型被错误地处理。这意味着sql.Date时区是特定的吗,sql.Time包含当前年份、月份和日等。最后:用哪一个?实际上取决于字段的SQL类型,Java处理时可以格式化日期。
  有些数据库,比如MySQL,精度为毫秒,然而另一些数据库,包括Oracle,存储SQL DATE类型数据时,毫秒部分的数据是不保存的。以下操作中容易出现不易被发现的BUG:获得一个JAVA里的日期对象。从数据库里读取日期试图比较两个日期对象是否相等。如果毫秒部分丢失,本来认为相等的两个日期对象用Equals方法可能返回false。.sql.Timestamp类比java.util.Date类精确度要高。这个类包了一个getTime()方法,但是它不会返回额外精度部分的数据,因此必须使用...总之,java.util.Date 就是Java的日期对象,而java.sql.Date 是针对SQL语句使用的,只包含日期而没有时间部分。

java.util.Date与 java.sql.Date两个包下Date的区别与联系相关推荐

  1. MyBatis中提示:invalid comparison: java.util.LinkedHashMap and java.lang.String

    场景 在使用MyBatis传递多个参数并且传递的参数作为判断条件时提示: invalid comparison: java.util.LinkedHashMap and java.lang.Strin ...

  2. JDK源码解析之java.util.Iterator和java.lang.Iterable

    在Java中,我们可以对List集合进行如下几种方式的遍历:第一种就是普通的for循环,第二种为迭代器遍历,第三种是for each循环.后面两种方式涉及到Java中的iterator和iterabl ...

  3. 【Intellij IDEA系列】IDEA泛型处理Unchecked assignment:'java.util.Map' to 'java.util.Maplt;'

    在 intellij idea 编辑器中,把一个Map类型的数据,强制类型转换的时候. 在中不想看到代码的如下警告的解决方法: 警告信息------------- 简单警告: Unchecked ca ...

  4. java.util.IllegalFormatConversionException: d != java.lang.String

    今天使用过sparksql编写代码的时候因为业务需求要保留小数据最后5位数,我就使用的是formatted进行的一个操作,将小数点第六位四舍五入. java.util.IllegalFormatCon ...

  5. java util zip.zipexc,JAVA解压zip压缩文件的实例

    今天在弄一个东西,需要在PL/SQL中解压zip的压缩包,刚开始的时候是想着直接在PLSQL中调用java,在java里面调用unzip的shell命令来解析压缩文件,但是比较悲剧,一直老是失败,在尝 ...

  6. java8中使用java.util.Base64报“java.lang.IllegalArgumentException: Illegal base64 character d”

    概述 Base64是一种字符串编码格式,采用了A-Z,a-z,0-9,"+"和"/"这64个字符来编码原始字符(还有垫字符"=").一个字符 ...

  7. java.util.zip 用法,Java压缩文件工具类ZipUtil使用方法代码示例

    本文实例通过Java的Zip输入输出流实现压缩和解压文件,前一部分代码实现获取文件路径,压缩文件名的更改等,具体如下: package com.utility.zip; import java.io. ...

  8. java.util.logging log4j,Java核心代碼(十)日志log4j,java.util.logging,commons-logging

    1,概述 org.apache.log4j.Logger //1996就有了,之后不斷完善 Java.util.logging //2000年發布接口,2002(JDK1.4)才有實現類 common ...

  9. java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification

    项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star,留言,一起学习进步 1.ConcurrentModific ...

最新文章

  1. excel导入SQL脚本
  2. jQuery - 当当网我的订单页
  3. pandas基于日期信息(time or date)生成季度信息(quarter)实战:pandas基于日期信息列生成季度信息列、dt.quarter生成季度信息、dt.to_period生成季度信息
  4. 5分钟带你读懂“语音识别”工作原理
  5. [spring] spring 装配Bean
  6. Python 正则表达式-问号的四种用法
  7. 苹果手机怎样用计算机,苹果手机怎么连接电脑,详细教您怎么使用苹果手机连接电脑...
  8. xUtils网络超时设置configCurrentHttpCacheExpiry和SoTimeout和connectionTimeout的区别
  9. Docker常用命令、超实用、讲解清晰明了(rm、stop、start、kill、logs、diff、top、cp、restart ...)
  10. git-ssh 配置和使用
  11. [轉]MS SQL 显示表结构
  12. MATLAB实现多元正态Copula分布
  13. 超好看的QQ群管机器人html官网源码
  14. julia语言 python解释器_新一代科学计算语言Julia以及开发环境搭建教程
  15. educoder平台+大数据从入门到实战+14个模块习题
  16. 【微分方程数值解】常微分方程(一)欧拉方法和改进欧拉方法(附python算例,封装类)
  17. 118.网络安全渗透测试—[权限提升篇16]—[Windows MSF提权模块提权审计工具]
  18. linux键盘模拟程序,linux下模拟键盘的几种方法
  19. 用旧平板打造家庭云数码相框
  20. 年度目标进度和完成进度对比

热门文章

  1. MySql字符串函数使用技巧
  2. HTML5移动端音乐播放器(启蒙篇)
  3. Android 开发中常用小技巧
  4. cocos2d-xna在使用某些场景转换效果时的问题以及修复
  5. js弹出窗体获得焦点
  6. 爆牙齿的世界杯日记(阿根疼啦)
  7. 医生为什么总是说生理性玻璃体混浊不用治
  8. Hive元数据信息表详解
  9. 单位脉冲信号与单位冲激信号的区别
  10. torchvision中Transform的normalize