java的時間類匯總(齊全)
前言
在項(xiàng)目開發(fā)中,我們用到了很多的時間類,很容易搞混,每次都要去網(wǎng)上查一遍文檔,現(xiàn)在自己整理一下,忘記了直接查,沒網(wǎng)也能直接擼碼。同時自己也鞏固一下。對時間類不熟悉的朋友也可以借鑒一下。
這邊主要是整理1.8的方法,如果方法已經(jīng)被棄用了則不在整理
基礎(chǔ)類
這個部分整理一下,我們常用的時間類:
類 | 簡述 |
---|---|
java.util.Date(父類) | 最基本的時間類 |
java.sql.Date | 格式年月日,沒有無參構(gòu)造 |
java.sql.time | 時分秒 |
java.sql.Timestamp | 年月日時分秒毫秒 |
java.util.Calendar(日歷) | 可以表示年月日時分秒毫秒 |
java.text.DateFormat | 時間可以格式化 |
java.util.Date的用法實(shí)例
Date date = new Date(); //Date date1 = new Date(0L); // 可以傳入Long值,表示距離1970年1月1日00:00:00 毫秒值 // 默認(rèn)當(dāng)前 System.out.println("[java.util.Date] " + date); ? ? ? ? ? ?// 默認(rèn)輸出格式 System.out.println("[java]date.Date]--getTime() " + date.getTime()); ?// 時間戳 距離1970.1.1的毫秒數(shù) System.out.println("[java]date.Date]--toInstant() " + date.toInstant()); // 轉(zhuǎn)化成Instant格式
結(jié)果:
java.sql.Date的用法實(shí)例
java.sql.Date date = new java.sql.Date(new Date().getTime()); // 構(gòu)造函數(shù) 傳入Long值,是距離1970年1月1日的毫秒值 System.out.println("[java.sql.Date] " + date); date.setTime(0L); ? // 相當(dāng)于重置一下時間,填入的還是Long值 System.out.println("[java.sql.Date] - setTime(0L) 后 " + date);
結(jié)果:
java.sql.Time的用法實(shí)例
// System.currentTimeMillis() 獲取的值 和 new java.util.Date的getTime的值是一樣的 // 但這個不能保證唯一,如果在短時間內(nèi)重復(fù)獲取可能會獲得相同的值 Time time = new Time(System.currentTimeMillis()); // 構(gòu)造函數(shù) 傳入的Long的值 System.out.println("[java.sql.Time] " + time); ? // 時:分:秒 time.setTime(0L); // 重置時間 System.out.println("[java.sql.Time] - setTime(0L) 后 " + time);
結(jié)果:
java.sql.Timestamp 用法實(shí)例
Long systemTime = System.currentTimeMillis(); Timestamp timestamp = new Timestamp(systemTime); // ? ? ? timestamp.setTime(0L); ? // 這個不解釋和之前的一樣 System.out.println("[System.currentTimeMillis()] " + systemTime); System.out.println("[java.sql.Timestamp] " + timestamp); System.out.println("[java.sql.Timestamp] - getNanos() " + timestamp.getNanos()); System.out.println("[java.sql.Timestamp] - getTime() " + timestamp.getTime()); timestamp.setNanos(892317); ?// 設(shè)置納秒級時間 System.out.println("[java.sql.Timestamp] -setNanos(100) 后 " + timestamp);
結(jié)果:
java.util.Calendar 用法實(shí)例
這個不是線程安全的,這個的優(yōu)勢在于我可以獲取到相應(yīng)的年月日時分秒,這個主要通過get方法獲取,不過直接用底下的simpleDateFormat,這邊做了解
? ? ? ?Calendar calendar = new GregorianCalendar(); ? ? ? ?System.out.println("[java.util.Calendar--getTime] " + calendar.getTime()); ? ? ? ?System.out.println("[java.util.Calendar--getWeekYear] " + calendar.getWeekYear()); ? ? ? ?System.out.println("[java.util.Calendar--getMinimalDaysInFirstWeek ] " ?+ calendar.getMinimalDaysInFirstWeek()); ? ? ? ?System.out.println("[java.util.Calendar--getFirstDayOfWeek ] " ?+ calendar.getFirstDayOfWeek()); ? ? ? ?System.out.println("[java.util.Calendar--getTimeInMillis ] " ?+ calendar.getTimeInMillis()); ? ? ? ?System.out.println("[java.util.Calendar--getWeeksInWeekYear ] " ?+ calendar.getWeeksInWeekYear()); ? ? ? ?System.out.println("[java.util.Calendar--getMinimalDaysInFirstWeek ] " ?+ calendar.getMinimalDaysInFirstWeek()); ? ? ? ? ?// 當(dāng)前時間 2022-09-07 ? ? ? ?System.out.println("[java.util.Calendar--calendar.getActualMaximum(Calendar.DATE)] " + calendar.getActualMaximum(Calendar.DATE)); ? ? ? ?System.out.println("[java.util.Calendar--calendar.get(Calendar.YEAR)] " + calendar.get(Calendar.YEAR)); ? ? ? ?System.out.println("[java.util.Calendar--calendar.get(Calendar.MONTH)] " + calendar.get(Calendar.MONTH)); ? ? ? ?System.out.println("[java.util.Calendar--calendar.get(Calendar.DATE)] " + calendar.get(Calendar.DATE)); ? ? ? ?System.out.println("[java.util.Calendar--calendar.get(Calendar.DAY_OF_WEEK) " + calendar.get(Calendar.DAY_OF_WEEK)); ? ? ? ?System.out.println("[java.util.Calendar--calendar.getMaximum(Calendar.DATE) " + calendar.getMaximum(Calendar.DATE));
java.text.SimpleDateFormat用法實(shí)例
這個主要是可以自己去定義輸出/輸入時間的格式,比如Date默認(rèn)的是 1970-01-01,現(xiàn)在可以修改成必入 1970/01/01
底下的是類型的匹配的字符
Letter | Date or Time Component | Presentation | Examples |
---|---|---|---|
G | Era designator | Text | AD |
y | Year | Year | 1996 ; 96 |
Y | Week year | Year | 2009 ; 09 |
M | Month in year (context sensitive) | Month | July ; Jul ; 07 |
L | Month in year (standalone form) | Month | July ; Jul ; 07 |
w | Week in year | Number | 27 |
W | Week in month | Number | 2 |
D | Day in year | Number | 189 |
d | Day in month | Number | 10 |
F | Day of week in month | Number | 2 |
E | Day name in week | Text | Tuesday ; Tue |
u | Day number of week (1 = Monday, ..., 7 = Sunday) | Number | 1 |
a | Am/pm marker | Text | PM |
H | Hour in day (0-23) | Number | 0 |
k | Hour in day (1-24) | Number | 24 |
K | Hour in am/pm (0-11) | Number | 0 |
h | Hour in am/pm (1-12) | Number | 12 |
m | Minute in hour | Number | 30 |
s | Second in minute | Number | 55 |
S | Millisecond | Number | 978 |
z | Time zone | General time zone | Pacific Standard Time ; PST ; GMT-08:00 |
Z | Time zone | RFC 822 time zone | -0800 |
X | Time zone | ISO 8601 time zone | -08 ; -0800 ; -08:00 |
其中的類型為:
- Text: 對于格式化,如果模式字母的數(shù)量是4以上,則使用完整的形式; 否則,如果有的話,使用簡短或縮寫形式。 對于解析,兩種形式都是接受的,與模式字母的數(shù)量無關(guān)。
SimpleDateFormat sdf = new SimpleDateFormat("E"); SimpleDateFormat sdf1 = new SimpleDateFormat("EE"); SimpleDateFormat sdf2 = new SimpleDateFormat("EEE"); SimpleDateFormat sdf3 = new SimpleDateFormat("EEEE"); ? System.out.println("[java.text.SimpleDateFormat--E] " + sdf.format(new Date())); System.out.println("[java.text.SimpleDateFormat--EE] " + sdf1.format(new Date())); System.out.println("[java.text.SimpleDateFormat--EEE] " + sdf2.format(new Date())); System.out.println("[java.text.SimpleDateFormat--EEEE] " + sdf3.format(new Date()));
- Number: 對于格式化,模式字母的數(shù)量是最小位數(shù),而較短的數(shù)字將零填充到此數(shù)量。 對于解析,模式字母的數(shù)量將被忽略,除非需要分隔兩個相鄰的字段。
SimpleDateFormat sdf4 = new SimpleDateFormat("w"); SimpleDateFormat sdf5 = new SimpleDateFormat("ww"); SimpleDateFormat sdf6 = new SimpleDateFormat("www"); SimpleDateFormat sdf7 = new SimpleDateFormat("wwww"); ? System.out.println("[java.text.SimpleDateFormat--w] " + sdf4.format(new Date())); System.out.println("[java.text.SimpleDateFormat--ww] " + sdf5.format(new Date())); System.out.println("[java.text.SimpleDateFormat--www] " + sdf6.format(new Date())); System.out.println("[java.text.SimpleDateFormat--wwww] " + sdf7.format(new Date()));
- Year:對于格式化,如果模式字母數(shù)為2,那么年份將被截?cái)酁?位數(shù); 否則被解釋為Number(不足補(bǔ)0)
SimpleDateFormat sdf8 = new SimpleDateFormat("y"); SimpleDateFormat sdf9 = new SimpleDateFormat("yy"); SimpleDateFormat sdf10 = new SimpleDateFormat("yyy"); SimpleDateFormat sdf11 = new SimpleDateFormat("yyyy"); SimpleDateFormat sdf12 = new SimpleDateFormat("yyyyy"); ? System.out.println("[java.text.SimpleDateFormat--y] " + sdf8.format(new Date())); System.out.println("[java.text.SimpleDateFormat--yy] " + sdf9.format(new Date())); System.out.println("[java.text.SimpleDateFormat--yyy] " + sdf10.format(new Date())); System.out.println("[java.text.SimpleDateFormat--yyyy] " + sdf11.format(new Date())); System.out.println("[java.text.SimpleDateFormat--yyyyy] " + sdf12.format(new Date()));
- Month: 如果模式字母數(shù)為3以上,則該月份被解釋為text; 否則,它被解釋為number
SimpleDateFormat sdf8 = new SimpleDateFormat("M"); SimpleDateFormat sdf9 = new SimpleDateFormat("MM"); SimpleDateFormat sdf10 = new SimpleDateFormat("MMM"); SimpleDateFormat sdf11 = new SimpleDateFormat("MMMM"); SimpleDateFormat sdf12 = new SimpleDateFormat("MMMMM"); ? System.out.println("[java.text.SimpleDateFormat--M] " + sdf8.format(new Date())); System.out.println("[java.text.SimpleDateFormat--MM] " + sdf9.format(new Date())); System.out.println("[java.text.SimpleDateFormat--MMM] " + sdf10.format(new Date())); System.out.println("[java.text.SimpleDateFormat--MMMM] " + sdf11.format(new Date())); System.out.println("[java.text.SimpleDateFormat--MMMMM] " + sdf12.format(new Date()));
其他的類型和時區(qū)有關(guān),暫時不去做描述先知道上面的常見的幾個
舉個常見的例子:
SimpleDateFormat sdf13 = new SimpleDateFormat("y-MM-dd kk:mm:ss"); // 這里的年也可以用 yyyy,這樣子和數(shù)量一致,好理解罷了 System.out.println("[java.text.SimpleDateFormat--y-MM-dd kk:mm:ss] " + sdf13.format(new Date()));
常用方法 parse,format
SimpleDateFormat sdf13 = new SimpleDateFormat("y-MM-dd"); // 字符串轉(zhuǎn)化為Date, 需要拋出異常 Date date = sdf13.parse("2022-01-02"); System.out.println("[java.text.SimpleDateFormat--parse] " + date.toString()); // Date轉(zhuǎn)化為String String currentDateString = sdf13.format(new Date()); System.out.println("[java.text.SimpleDateFormat--format] " + currentDateString);
接下來的時間類都是jdk1.8新增的
相對來說,底下的時間是沒有偏移量的比如1就代表周一,而不要加。然后還是線程安全的
底下的我放在一起做個比較
LocalDate,LocalTime,LocalDateTime用法實(shí)例
/** * 獲取當(dāng)前的日期 */ LocalDate localDate = LocalDate.now(); System.out.println("[java.time.LocalDate] -- now " + localDate); LocalTime localTime = LocalTime.now(); System.out.println("[java.time.LocalTime ] -- now " + localTime); LocalDateTime localDateTime = LocalDateTime.now(); System.out.println("[java.time.LocalDateTime ] -- now " + localDateTime); /** * 獲取指定的日期 */ LocalDate localDate1 = LocalDate.of(2022,9,7); System.out.println("[java.time.LocalDate] -- of " + localDate1); LocalTime localTime1 = LocalTime.of(12,53,18); System.out.println("[java.time.LocalTime] -- of " + localTime1); LocalDateTime localDateTime1 = LocalDateTime.of(2000, 12,3,12,3,4); System.out.println("[java.time.LocalDateTime ] -- of " + localDateTime1); /** * get的一些方法 */ System.out.println("[java.time.LocalDateTime ] -- getYear " + localDate1.getYear()); System.out.println("[java.time.LocalDateTime ] -- getDayOfMonth " + localDate1.getDayOfMonth()); System.out.println("[java.time.LocalDateTime ] -- getMonth " + localDate1.getMonth()); System.out.println("[java.time.LocalDateTime ] -- getMonthValue " + localDate1.getMonthValue()); ? ? ? /** * with 就是重新賦值(原LocalDateTime不變) * 這邊就舉一個例 */ LocalDateTime localDateTime2 = localDateTime1.withYear(2011); System.out.println("[java.time.LocalDateTime ] --原來 2000年 " + localDateTime1); System.out.println("[java.time.LocalDateTime ] --原來 2000年 withYear(2011) " + localDateTime2); ? /** * 加 減操作 * 舉一個加的例子 * minusXXX 這個是減 */ System.out.println("[java.time.LocalDateTime ] --原來 12月份 " + localDateTime1.getMonthValue()); System.out.println("[java.time.LocalDateTime ] --原來 12月份 plusMonths(1) " + localDateTime1.plusMonths(1).getMonthValue());
DateTimeFormatter
這個主要可以用來進(jìn)行String 和 LocalXXX之間的轉(zhuǎn)化,案例
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); System.out.println(dateTimeFormatter.format(LocalDateTime.now()));
總結(jié)
這邊總結(jié)了基本常用的時間類,沒有把所有的方法都列出來,不過常見的列出來了,如果沒有強(qiáng)制要求建議使用 1.8
到此這篇關(guān)于java的時間類匯總(齊全)的文章就介紹到這了,更多相關(guān)java時間類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中策略設(shè)計(jì)模式的實(shí)現(xiàn)及應(yīng)用場景
策略設(shè)計(jì)模式是Java中一種常用的設(shè)計(jì)模式,它通過定義一系列算法并將其封裝成獨(dú)立的策略類,從而使得算法可以在不影響客戶端的情況下隨時切換。策略設(shè)計(jì)模式主要應(yīng)用于系統(tǒng)中存在多種相似的算法、需要靈活調(diào)整算法邏輯或者需要擴(kuò)展新的算法等場景2023-04-04Java使用PrepareStatement實(shí)現(xiàn)數(shù)據(jù)的插入與查詢操作
這篇文章主要為大家詳細(xì)介紹了Java如何使用PrepareStatement實(shí)現(xiàn)數(shù)據(jù)的插入與查詢操作,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-09-09Java 中文字符按Unicode排序的實(shí)現(xiàn)方法
這篇文章主要介紹了Java 中文字符按Unicode排序的實(shí)現(xiàn)方法,非常不錯,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10JDBC中PreparedStatement詳解以及應(yīng)用場景實(shí)例介紹
PreparedStatement對象代表的是一個預(yù)編譯的SQL語句,用它提供的setter方法可以傳入查詢的變量,這篇文章主要給大家介紹了關(guān)于JDBC中PreparedStatement詳解以及應(yīng)用場景實(shí)例介紹的相關(guān)資料,需要的朋友可以參考下2024-02-02Springboot視頻接口報(bào)大量的ClientAbortException找不到原因的解決
本文主要介紹了Springboot視頻接口報(bào)大量的ClientAbortException找不到原因的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08