java的時間類匯總(齊全)
前言
在項目開發(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的用法實例
Date date = new Date();
//Date date1 = new Date(0L); // 可以傳入Long值,表示距離1970年1月1日00:00:00 毫秒值 // 默認當前
System.out.println("[java.util.Date] " + date); ? ? ? ? ? ?// 默認輸出格式
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的用法實例
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); ? // 相當于重置一下時間,填入的還是Long值
System.out.println("[java.sql.Date] - setTime(0L) 后 " + date);結(jié)果:

java.sql.Time的用法實例
// 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 用法實例
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 用法實例
這個不是線程安全的,這個的優(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());
?
? ? ? ?// 當前時間 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用法實例
這個主要是可以自己去定義輸出/輸入時間的格式,比如Date默認的是 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,那么年份將被截斷為2位數(shù); 否則被解釋為Number(不足補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用法實例
/**
* 獲取當前的日期
*/
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
這個主要可以用來進行String 和 LocalXXX之間的轉(zhuǎn)化,案例
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
System.out.println(dateTimeFormatter.format(LocalDateTime.now()));
總結(jié)
這邊總結(jié)了基本常用的時間類,沒有把所有的方法都列出來,不過常見的列出來了,如果沒有強制要求建議使用 1.8
到此這篇關(guān)于java的時間類匯總(齊全)的文章就介紹到這了,更多相關(guān)java時間類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Java使用sqlite 數(shù)據(jù)庫如何生成db文件
這篇文章主要介紹了詳解Java 操作sqllite 數(shù)據(jù)庫如何生成db文件的相關(guān)資料,需要的朋友可以參考下2017-07-07
SpringBoot詳解整合Spring?Boot?Admin實現(xiàn)監(jiān)控功能
這篇文章主要介紹了SpringBoot整合Spring?Boot?Admin實現(xiàn)服務(wù)監(jiān)控,內(nèi)容包括Server端服務(wù)開發(fā),Client端服務(wù)開發(fā)其中Spring?Boot?Admin還可以對其監(jiān)控的服務(wù)提供告警功能,如服務(wù)宕機時,可以及時以郵件方式通知運維人員,感興趣的朋友跟隨小編一起看看吧2022-07-07
maven升級版本后報錯:Blocked mirror for repositories
本文主要介紹了maven升級版本后報錯:Blocked mirror for repositories,文中的解決方法非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-09-09
Spring Cloud Gateway替代zuul作為API網(wǎng)關(guān)的方法
本文簡要介紹如何使用Spring Cloud Gateway 作為API 網(wǎng)關(guān)(不是使用zuul作為網(wǎng)關(guān)),結(jié)合實例代碼給大家詳細講解,感興趣的朋友跟隨小編一起看看吧2023-02-02
Java C++題解leetcode 1684統(tǒng)計一致字符串的數(shù)目示例
這篇文章主要為大家介紹了Java C++題解leetcode 1684統(tǒng)計一致字符串的數(shù)目示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
MybatisPlus中如何調(diào)用Oracle存儲過程
這篇文章主要介紹了MybatisPlus中如何調(diào)用Oracle存儲過程的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05

