java.sql.Date和java.util.Date的区别有哪些

数据库   发布日期:2024年04月22日   浏览次数:638

这篇文章主要介绍“java.sql.Date和java.util.Date的区别有哪些”,在日常操作中,相信很多人在java.sql.Date和java.util.Date的区别有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”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 日期-时间获取值的字段
TemporalAdjuster emporal 对象转换,实现自定义
ChronoLocalDate 日历系统接口

常用 api

1、 获取当前日期

  1. LocalDate.now()

2、创建日期

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

3、获取年份

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

4、获取月份

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

5、获取日

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

6、获取周几

  1. date.getDayOfWeek()

7、获取当前月多少天

  1. date.lengthOfMonth()

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

  1. date.isLeapYear()

9、当前时间

  1. LocalTime nowTime = LocalTime.now()

10、创建时间

  1. LocalTime.of(23, 59, 59)

11、获取时

  1. nowTime.getHour()

12、获取分

  1. nowTime.getMinute()

13、获取秒

  1. nowTime.getSecond()

14、获取毫秒

  1. nowTime.getLong(ChronoField.MILLI_OF_SECOND)

15、获取纳秒

  1. nowTime.getNano()

16、创建日期时间对象

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

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

  1. LocalDateTime.now()

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

  1. date.atTime(1, 2, 3)

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

  1. nowTime.atDate(date)

20、通过 LocalDateTime 获取 LocalDate 对象

  1. LocalDateTime.now().toLocalDate()

21、通过 LocalDateTime 获取 LocalTime 对象

  1. LocalDateTime.now().toLocalTime()

22、解析日期字符串

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

23、解析时间字符串

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

24、解析日期时间字符串

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

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

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

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

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

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

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

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

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

29、格式化

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

30、解析

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

31、时区

  1. //上海时区
  2. ZoneId shanghaiZone = ZoneId.of("Asia/Shanghai");
  3. //设置日期为上海时区
  4. LocalDate.now().atStartOfDay(shanghaiZone)
  5. //设置日期时间为上海时区
  6. LocalDateTime.now().atZone(shanghaiZone)
  7. //设置 Instant 为上海时区
  8. Instant.now().atZone(shanghaiZone)

32、子午线时间差

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

以上就是java.sql.Date和java.util.Date的区别有哪些的详细内容,更多关于java.sql.Date和java.util.Date的区别有哪些的资料请关注九品源码其它相关文章!