java.sql.Date和java.util.Date的区别详解

 更新时间:2023年03月27日 10:32:36   作者:6个日的梦想  
Java中有两个Date类,一个是java.util.Date通常情况下用它获取当前时间或构造时间,另一个是java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分,这篇文章主要给大家介绍了关于java.sql.Date和java.util.Date区别的相关资料,需要的朋友可以参考下

参考答案

  • java.sql.Date 是 java.util.Date 的子类
  • java.util.Date 是 JDK 中的日期类,精确到时、分、秒、毫秒
  • java.sql.Date 与数据库 Date 相对应的一个类型,只有日期部分,时分秒都会设置为 0,如:2019-10-23 00:00:00
  • 要从数据库时间字段取 时、分、秒、毫秒数据,可以使用 java.sql.Timestamp

JDK1.8 中的日期与时间 API

为什么 JDK 1.8 之前的时间与日期 API 不好用?

1、java.util.Date 是从 JDK 1.0 开始提供,易用性差

  • 默认是中欧时区(Central Europe Time)
  • 起始年份是 1900 年
  • 起始月份从 0 开始
  • 对象创建之后可修改

2、JDK 1.1 废弃了 Date 中很多方法,新增了并建议使用 java.util.Calendar 类

  • 相比 Date 去掉了年份从 1900 年开始
  • 月份依然从 0 开始
  • 选用 Date 或 Calendar,让人更困扰

3、DateFormat 格式化时间,线程不安全

为了解决 JDK 中时间与日期较难使用的问题,JDK 1.8 开始,吸收了 Joda-Time 很多功能,新增 java.time 包,加了新特性

  • 区分适合人阅读的和适合机器计算的时间与日期类
  • 日期、时间及对比相关的对象创建完均不可修改
  • 可并发解析与格式化日期与时间
  • 支持设置不同的时区与历法
LocalDate本地日期
LocalTime本地时间
LocalDateTime本地日期+时间
Instant时间戳,适合机器时间计算
Duration时间差
Period年、月、日差
ZoneOffset时区偏移量
ZonedDateTime带时区的日期时间
Clock时钟,获取其他地区时钟
DateTimeFormatter时间格式化
Temporal日期-时间获取值的字段
TemporalAdjusteremporal 对象转换,实现自定义
ChronoLocalDate日历系统接口

常用 api

1、 获取当前日期

LocalDate.now()

2、创建日期

LocalDate date = LocalDate.of(2020, 9, 21)

3、获取年份

date.getYear()
 
//通过 TemporalField 接口的实现枚举类 ChronoField.YEAR 获取年份
date.get(ChronoField.YEAR)

4、获取月份

date.getMonth().getValue()
 
//通过 TemporalField 接口的实现枚举类 ChronoField.MONTH_OF_YEAR 获取月份
date.get(ChronoField.MONTH_OF_YEAR)

5、获取日

date.getDayOfMonth()
 
//通过 TemporalField 接口的实现枚举类 ChronoField.DAY_OF_MONTH 获取日
date.get(ChronoField.DAY_OF_MONTH)

6、获取周几

date.getDayOfWeek()

7、获取当前月多少天

date.lengthOfMonth()

8、获取当前年是否为闰年

date.isLeapYear()

9、当前时间

LocalTime nowTime = LocalTime.now()

10、创建时间

LocalTime.of(23, 59, 59)

11、获取时

nowTime.getHour()

12、获取分

nowTime.getMinute()

13、获取秒

nowTime.getSecond()

14、获取毫秒

nowTime.getLong(ChronoField.MILLI_OF_SECOND)

15、获取纳秒

nowTime.getNano()

16、创建日期时间对象

LocalDateTime.of(2020, 9, 21, 1, 2, 3);
LocalDateTime.of(date, nowTime);

17、获取当前日期时间对象

LocalDateTime.now()

18、通过 LocalDate 创建日期时间对象

date.atTime(1, 2, 3)

19、通过 LocalTime 创建日期时间对象

nowTime.atDate(date)

20、通过 LocalDateTime 获取 LocalDate 对象

LocalDateTime.now().toLocalDate()

21、通过 LocalDateTime 获取 LocalTime 对象

LocalDateTime.now().toLocalTime()

22、解析日期字符串

LocalDate.parse("2020-09-21")

23、解析时间字符串

LocalTime.parse("01:02:03")

24、解析日期时间字符串

LocalDateTime.parse("2020-09-21T01:02:03", DateTimeFormatter.ISO_LOCAL_DATE_TIME)

25、方便时间建模、机器处理的时间处理类 Instant,起始时间 1970-01-01 00:00:00

//起始时间 + 3 秒
Instant.ofEpochSecond(3)
//起始时间 + 3 秒 + 100 万纳秒
Instant.ofEpochSecond(3, 1_000_000_000)
//起始时间 + 3 秒 - 100 万纳秒
Instant.ofEpochSecond(3, -1_000_000_000))
//距离 1970-01-01 00:00:00 毫秒数
Instant.now().toEpochMilli()

26、Duration:LocalTime、LocalDateTime、Intant 的时间差处理

Duration.between(LocalTime.parse("01:02:03"), LocalTime.parse("02:03:04"))
Duration.between(LocalDateTime.parse("2020-09-21T01:02:03"), LocalDateTime.parse("2020-09-22T02:03:04"))
Duration.between(Instant.ofEpochMilli(1600623455080L), Instant.now())

27、日期时间,前、后、相等比较

//2020-09-21 在 2020-09-18 前?
LocalDate.parse("2020-09-21").isBefore(LocalDate.parse("2020-09-18"))
//01:02:03 在 02:03:04 后?
LocalTime.parse("01:02:03").isAfter(LocalTime.parse("02:03:04"))

28、修改日期、时间对象,返回副本

//修改日期返回副本
LocalDate.now().withYear(2019).withMonth(9).withDayOfMonth(9)
LocalDate date4Cal = LocalDate.now();
//加一周
date4Cal.plusWeeks(1)
//减两个月
date4Cal.minusMonths(2)
//减三年
date4Cal.minusYears(3)

29、格式化

//格式化当前日期
LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE)
//指定格式,格式化当前日期
LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"))
指定格式,格式化当前日期时间
//格式化当前日期时间
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd  HH:mm:ss"))

30、解析

//日期解析
LocalDate.parse("2020-09-20")
//指定格式,日期解析
LocalDate.parse("2020/09/20", DateTimeFormatter.ofPattern("yyyy/MM/dd"))
//指定格式,日期时间解析
LocalDateTime.parse("2020/09/20 01:01:03", DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"))

31、时区

//上海时区
ZoneId shanghaiZone = ZoneId.of("Asia/Shanghai");
//设置日期为上海时区
LocalDate.now().atStartOfDay(shanghaiZone)
//设置日期时间为上海时区
LocalDateTime.now().atZone(shanghaiZone)
//设置 Instant 为上海时区
Instant.now().atZone(shanghaiZone)

32、子午线时间差

//时间差减 1 小时
ZoneOffset offset = ZoneOffset.of("-01:00");
//设置时间差
OffsetDateTime.of(LocalDateTime.now(), offset)

总结

到此这篇关于java.sql.Date和java.util.Date区别的文章就介绍到这了,更多相关java.sql.Date和java.util.Date区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java使用poi自定义excel标题头并导出方式

    java使用poi自定义excel标题头并导出方式

    这篇文章主要介绍了java使用poi自定义excel标题头并导出方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Java编程long数据类型的使用问题

    Java编程long数据类型的使用问题

    这篇文章主要介绍了Java编程数据类型long的使用问题,涉及长整型数据的取值范围和不同整数类型的表示方法,需要的朋友可以参考下
    2017-09-09
  • java多线程累加计数的实现方法

    java多线程累加计数的实现方法

    在多线程协作任务中,如何计算也是很重的,这篇文章主要介绍了java多线程累加计数的实现方法,感兴趣的朋友可以了解一下
    2021-05-05
  • IDEA如何对单个的java class文件打成jar包

    IDEA如何对单个的java class文件打成jar包

    这篇文章主要介绍了IDEA如何对单个的java class文件打成jar包问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 浅谈线程的几种可用状态

    浅谈线程的几种可用状态

    下面小编就为大家带来一篇浅谈线程的几种可用状态。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Mybatis-Plus之ID自动增长的设置实现

    Mybatis-Plus之ID自动增长的设置实现

    本文主要介绍了Mybatis-Plus之ID自动增长的设置实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • java时间戳转日期格式的实现代码

    java时间戳转日期格式的实现代码

    本篇文章是对java时间戳转日期格式的实现代码进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • thymeleaf实现前后端数据交换的示例详解

    thymeleaf实现前后端数据交换的示例详解

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎,当通过 Web 应用程序访问时,Thymeleaf 会动态地替换掉静态内容,使页面动态显示,这篇文章主要介绍了thymeleaf实现前后端数据交换,需要的朋友可以参考下
    2022-07-07
  • SpringBoot之如何正确、安全的关闭服务

    SpringBoot之如何正确、安全的关闭服务

    这篇文章主要介绍了SpringBoot之如何正确、安全的关闭服务问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Lombok中关于@Data的使用解析

    Lombok中关于@Data的使用解析

    这篇文章主要介绍了Lombok中关于@Data的使用解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论