java的時(shí)間類匯總(齊全)
前言
在項(xiàng)目開發(fā)中,我們用到了很多的時(shí)間類,很容易搞混,每次都要去網(wǎng)上查一遍文檔,現(xiàn)在自己整理一下,忘記了直接查,沒網(wǎng)也能直接擼碼。同時(shí)自己也鞏固一下。對(duì)時(shí)間類不熟悉的朋友也可以借鑒一下。
這邊主要是整理1.8的方法,如果方法已經(jīng)被棄用了則不在整理
基礎(chǔ)類
這個(gè)部分整理一下,我們常用的時(shí)間類:
| 類 | 簡(jiǎn)述 |
|---|---|
| java.util.Date(父類) | 最基本的時(shí)間類 |
| java.sql.Date | 格式年月日,沒有無(wú)參構(gòu)造 |
| java.sql.time | 時(shí)分秒 |
| java.sql.Timestamp | 年月日時(shí)分秒毫秒 |
| java.util.Calendar(日歷) | 可以表示年月日時(shí)分秒毫秒 |
| java.text.DateFormat | 時(shí)間可以格式化 |
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()); ?// 時(shí)間戳 距離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)于重置一下時(shí)間,填入的還是Long值
System.out.println("[java.sql.Date] - setTime(0L) 后 " + date);結(jié)果:

java.sql.Time的用法實(shí)例
// System.currentTimeMillis() 獲取的值 和 new java.util.Date的getTime的值是一樣的
// 但這個(gè)不能保證唯一,如果在短時(shí)間內(nèi)重復(fù)獲取可能會(huì)獲得相同的值
Time time = new Time(System.currentTimeMillis()); // 構(gòu)造函數(shù) 傳入的Long的值
System.out.println("[java.sql.Time] " + time); ? // 時(shí):分:秒
time.setTime(0L); // 重置時(shí)間
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); ? // 這個(gè)不解釋和之前的一樣
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è)置納秒級(jí)時(shí)間
System.out.println("[java.sql.Timestamp] -setNanos(100) 后 " + timestamp);結(jié)果:

java.util.Calendar 用法實(shí)例
這個(gè)不是線程安全的,這個(gè)的優(yōu)勢(shì)在于我可以獲取到相應(yīng)的年月日時(shí)分秒,這個(gè)主要通過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)前時(shí)間 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í)例
這個(gè)主要是可以自己去定義輸出/輸入時(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: 對(duì)于格式化,如果模式字母的數(shù)量是4以上,則使用完整的形式; 否則,如果有的話,使用簡(jiǎn)短或縮寫形式。 對(duì)于解析,兩種形式都是接受的,與模式字母的數(shù)量無(wú)關(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: 對(duì)于格式化,模式字母的數(shù)量是最小位數(shù),而較短的數(shù)字將零填充到此數(shù)量。 對(duì)于解析,模式字母的數(shù)量將被忽略,除非需要分隔兩個(gè)相鄰的字段。
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:對(duì)于格式化,如果模式字母數(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()));
其他的類型和時(shí)區(qū)有關(guān),暫時(shí)不去做描述先知道上面的常見的幾個(gè)
舉個(gè)常見的例子:
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);
接下來(lái)的時(shí)間類都是jdk1.8新增的
相對(duì)來(lái)說,底下的時(shí)間是沒有偏移量的比如1就代表周一,而不要加。然后還是線程安全的
底下的我放在一起做個(gè)比較
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不變)
* 這邊就舉一個(gè)例
*/
LocalDateTime localDateTime2 = localDateTime1.withYear(2011);
System.out.println("[java.time.LocalDateTime ] --原來(lái) 2000年 " + localDateTime1);
System.out.println("[java.time.LocalDateTime ] --原來(lái) 2000年 withYear(2011) " + localDateTime2);
?
/**
* 加 減操作
* 舉一個(gè)加的例子
* minusXXX 這個(gè)是減
*/
System.out.println("[java.time.LocalDateTime ] --原來(lái) 12月份 " + localDateTime1.getMonthValue());
System.out.println("[java.time.LocalDateTime ] --原來(lái) 12月份 plusMonths(1) " + localDateTime1.plusMonths(1).getMonthValue());
DateTimeFormatter
這個(gè)主要可以用來(lái)進(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é)了基本常用的時(shí)間類,沒有把所有的方法都列出來(lái),不過常見的列出來(lái)了,如果沒有強(qiáng)制要求建議使用 1.8
到此這篇關(guān)于java的時(shí)間類匯總(齊全)的文章就介紹到這了,更多相關(guān)java時(shí)間類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Java使用sqlite 數(shù)據(jù)庫(kù)如何生成db文件
這篇文章主要介紹了詳解Java 操作sqllite 數(shù)據(jù)庫(kù)如何生成db文件的相關(guān)資料,需要的朋友可以參考下2017-07-07
SpringBoot詳解整合Spring?Boot?Admin實(shí)現(xiàn)監(jiān)控功能
這篇文章主要介紹了SpringBoot整合Spring?Boot?Admin實(shí)現(xiàn)服務(wù)監(jiān)控,內(nèi)容包括Server端服務(wù)開發(fā),Client端服務(wù)開發(fā)其中Spring?Boot?Admin還可以對(duì)其監(jiān)控的服務(wù)提供告警功能,如服務(wù)宕機(jī)時(shí),可以及時(shí)以郵件方式通知運(yùn)維人員,感興趣的朋友跟隨小編一起看看吧2022-07-07
maven升級(jí)版本后報(bào)錯(cuò):Blocked mirror for repositories
本文主要介紹了maven升級(jí)版本后報(bào)錯(cuò):Blocked mirror for repositories,文中的解決方法非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09
Spring Cloud Gateway替代zuul作為API網(wǎng)關(guān)的方法
本文簡(jiǎn)要介紹如何使用Spring Cloud Gateway 作為API 網(wǎng)關(guān)(不是使用zuul作為網(wǎng)關(guān)),結(jié)合實(shí)例代碼給大家詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧2023-02-02
Java C++題解leetcode 1684統(tǒng)計(jì)一致字符串的數(shù)目示例
這篇文章主要為大家介紹了Java C++題解leetcode 1684統(tǒng)計(jì)一致字符串的數(shù)目示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
MybatisPlus中如何調(diào)用Oracle存儲(chǔ)過程
這篇文章主要介紹了MybatisPlus中如何調(diào)用Oracle存儲(chǔ)過程的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05

