您好,登錄后才能下訂單哦!
這篇文章主要介紹“java.sql.Date和java.util.Date的區(qū)別有哪些”,在日常操作中,相信很多人在java.sql.Date和java.util.Date的區(qū)別有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java.sql.Date和java.util.Date的區(qū)別有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
java.sql.Date 是 java.util.Date 的子類
java.util.Date 是 JDK 中的日期類,精確到時、分、秒、毫秒
java.sql.Date 與數(shù)據(jù)庫 Date 相對應的一個類型,只有日期部分,時分秒都會設置為 0,如:2019-10-23 00:00:00
要從數(shù)據(jù)庫時間字段取 時、分、秒、毫秒數(shù)據(jù),可以使用 java.sql.Timestamp
為什么 JDK 1.8 之前的時間與日期 API 不好用?
1、java.util.Date 是從 JDK 1.0 開始提供,易用性差
默認是中歐時區(qū)(Central Europe Time)
起始年份是 1900 年
起始月份從 0 開始
對象創(chuàng)建之后可修改
2、JDK 1.1 廢棄了 Date 中很多方法,新增了并建議使用 java.util.Calendar 類
相比 Date 去掉了年份從 1900 年開始
月份依然從 0 開始
選用 Date 或 Calendar,讓人更困擾
3、DateFormat 格式化時間,線程不安全
為了解決 JDK 中時間與日期較難使用的問題,JDK 1.8 開始,吸收了 Joda-Time 很多功能,新增 java.time 包,加了新特性:
區(qū)分適合人閱讀的和適合機器計算的時間與日期類
日期、時間及對比相關的對象創(chuàng)建完均不可修改
可并發(fā)解析與格式化日期與時間
支持設置不同的時區(qū)與歷法
LocalDate | 本地日期 |
LocalTime | 本地時間 |
LocalDateTime | 本地日期+時間 |
Instant | 時間戳,適合機器時間計算 |
Duration | 時間差 |
Period | 年、月、日差 |
ZoneOffset | 時區(qū)偏移量 |
ZonedDateTime | 帶時區(qū)的日期時間 |
Clock | 時鐘,獲取其他地區(qū)時鐘 |
DateTimeFormatter | 時間格式化 |
Temporal | 日期-時間獲取值的字段 |
TemporalAdjuster | emporal 對象轉換,實現(xiàn)自定義 |
ChronoLocalDate | 日歷系統(tǒng)接口 |
1、 獲取當前日期
LocalDate.now()
2、創(chuàng)建日期
LocalDate date = LocalDate.of(2020, 9, 21)
3、獲取年份
date.getYear() //通過 TemporalField 接口的實現(xiàn)枚舉類 ChronoField.YEAR 獲取年份 date.get(ChronoField.YEAR)
4、獲取月份
date.getMonth().getValue() //通過 TemporalField 接口的實現(xiàn)枚舉類 ChronoField.MONTH_OF_YEAR 獲取月份 date.get(ChronoField.MONTH_OF_YEAR)
5、獲取日
date.getDayOfMonth() //通過 TemporalField 接口的實現(xiàn)枚舉類 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、創(chuàng)建時間
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、創(chuàng)建日期時間對象
LocalDateTime.of(2020, 9, 21, 1, 2, 3); LocalDateTime.of(date, nowTime);
17、獲取當前日期時間對象
LocalDateTime.now()
18、通過 LocalDate 創(chuàng)建日期時間對象
date.atTime(1, 2, 3)
19、通過 LocalTime 創(chuàng)建日期時間對象
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 毫秒數(shù) 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、時區(qū)
//上海時區(qū) ZoneId shanghaiZone = ZoneId.of("Asia/Shanghai"); //設置日期為上海時區(qū) LocalDate.now().atStartOfDay(shanghaiZone) //設置日期時間為上海時區(qū) LocalDateTime.now().atZone(shanghaiZone) //設置 Instant 為上海時區(qū) Instant.now().atZone(shanghaiZone)
32、子午線時間差
//時間差減 1 小時 ZoneOffset offset = ZoneOffset.of("-01:00"); //設置時間差 OffsetDateTime.of(LocalDateTime.now(), offset)
到此,關于“java.sql.Date和java.util.Date的區(qū)別有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。