这篇文章主要介绍“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 不好用?
java.util.Date 是从 JDK 1.0 开始提供,易用性差
默认是中欧时区(Central Europe Time)
起始年份是 1900 年
起始月份从 0 开始
对象创建之后可修改
JDK 1.1 废弃了 Date 中很多方法,新增了并建议使用 java.util.Calendar 类
相比 Date 去掉了年份从 1900 年开始
月份依然从 0 开始
选用 Date 或 Calendar,让人更困扰
DateFormat 格式化时间,线程不安全
为了解决 JDK 中时间与日期较难使用的问题,JDK 1.8 开始,吸收了 Joda-Time 很多功能,新增 java.time 包,加了新特性:
区分适合人阅读的和适合机器计算的时间与日期类
日期、时间及对比相关的对象创建完均不可修改
可并发解析与格式化日期与时间
支持设置不同的时区与历法
LocalDate | 本地日期 |
LocalTime | 本地时间 |
LocalDateTime | 本地日期+时间 |
Instant | 时间戳,适合机器时间计算 |
Duration | 时间差 |
Period | 年、月、日差 |
ZoneOffset | 时区偏移量 |
ZonedDateTime | 带时区的日期时间 |
Clock | 时钟,获取其他地区时钟 |
DateTimeFormatter | 时间格式化 |
Temporal | 日期-时间获取值的字段 |
TemporalAdjuster | emporal 对象转换,实现自定义 |
ChronoLocalDate | 日历系统接口 |
常用 api
获取当前日期
LocalDate.now()
创建日期
LocalDate date = LocalDate.of(2020, 9, 21)
获取年份
date.getYear() //通过 TemporalField 接口的实现枚举类 ChronoField.YEAR 获取年份date.get(ChronoField.YEAR)
获取月份
date.getMonth().getValue() //通过 TemporalField 接口的实现枚举类 ChronoField.MONTH_OF_YEAR 获取月份date.get(ChronoField.MONTH_OF_YEAR)
获取日
date.getDayOfMonth() //通过 TemporalField 接口的实现枚举类 ChronoField.DAY_OF_MONTH 获取日date.get(ChronoField.DAY_OF_MONTH)
获取周几
date.getDayOfWeek()
获取当前月多少天
date.lengthOfMonth()
获取当前年是否为闰年
date.isLeapYear()
当前时间
LocalTime nowTime = LocalTime.now()
创建时间
LocalTime.of(23, 59, 59)
获取时
nowTime.getHour()
获取分
nowTime.getMinute()
获取秒
nowTime.getSecond()
获取毫秒
nowTime.getLong(ChronoField.MILLI_OF_SECOND)
获取纳秒
nowTime.getNano()
创建日期时间对象
LocalDateTime.of(2020, 9, 21, 1, 2, 3);LocalDateTime.of(date, nowTime);
获取当前日期时间对象
LocalDateTime.now()
通过 LocalDate 创建日期时间对象
date.atTime(1, 2, 3)
通过 LocalTime 创建日期时间对象
nowTime.atDate(date)
通过 LocalDateTime 获取 LocalDate 对象
LocalDateTime.now().toLocalDate()
通过 LocalDateTime 获取 LocalTime 对象
LocalDateTime.now().toLocalTime()
解析日期字符串
LocalDate.parse("2020-09-21")
解析时间字符串
LocalTime.parse("01:02:03")
解析日期时间字符串
LocalDateTime.parse("2020-09-21T01:02:03", DateTimeFormatter.ISO_LOCAL_DATE_TIME)
方便时间建模、机器处理的时间处理类 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()
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())
日期时间,前、后、相等比较
//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"))
修改日期、时间对象,返回副本
//修改日期返回副本LocalDate.now().withYear(2019).withMonth(9).withDayOfMonth(9)LocalDate date4Cal = LocalDate.now();//加一周date4Cal.plusWeeks(1)//减两个月date4Cal.minusMonths(2)//减三年date4Cal.minusYears(3)
格式化
//格式化当前日期LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE)//指定格式,格式化当前日期LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"))指定格式,格式化当前日期时间//格式化当前日期时间LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss"))
解析
//日期解析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"))
时区
//上海时区ZoneId shanghaiZone = ZoneId.of("Asia/Shanghai");//设置日期为上海时区LocalDate.now().atStartOfDay(shanghaiZone)//设置日期时间为上海时区LocalDateTime.now().atZone(shanghaiZone)//设置 Instant 为上海时区Instant.now().atZone(shanghaiZone)
子午线时间差
//时间差减 1 小时ZoneOffset offset = ZoneOffset.of("-01:00");//设置时间差OffsetDateTime.of(LocalDateTime.now(), offset)
到此,关于“java.sql.Date和java.util.Date的区别有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!