欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java8不可或缺小幫手之日期應用

 更新時間:2023年05月12日 11:21:11   作者:搶老婆酸奶的小肥仔  
jdk1.8后引入了新的日期時間處理API,相比傳統(tǒng)的date操作更加簡便,date中的SimpleDateFormat也是非線程安全的,廢話不多說,開干

jdk1.8后引入了新的日期時間處理API,相比傳統(tǒng)的date操作更加簡便,date中的SimpleDateFormat也是非線程安全的。

新的API是標準的ISO-8601日歷系統(tǒng),位于java.time包下,且所有類都是不可變類型、線程安全。

廢話不多說,開干。

1、獲取當前日期時間

now() :靜態(tài)方法,根據(jù)當前時間創(chuàng)建對象。例如:獲取當前日期,當前時間,當前日期時間

//獲取當前日期
LocalDate nowDate = LocalDate.now();
System.out.println("獲取當前日期:"+nowDate);
//獲取當前時間
LocalTime nowTime = LocalTime.now();
System.out.println("獲取當前時間:"+nowTime);
//獲取當前日期時間
LocalDateTime nowDateTime = LocalDateTime.now();
System.out.println("獲取當前日期時間:"+nowDateTime);

輸出:

獲取當前日期:2023-05-11
獲取當前時間:11:10:10.453
獲取當前日期時間:2023-05-11T11:10:10.454

2、日期時間格式化

DateTimeFormatter:靜態(tài)格式化類,提供了ofPattern,ofLocalizedDate,format等格式化方法。

方法描述
ofPattern(String pattern)格式化樣式定義,例如:yyyy-MM-dd等
format(TemporalAccessor temporal)執(zhí)行格式化,返回字符串類型的時間樣式,如:2023-05-11
ofLocalizedDate(FormatStyle dateStyle)返回特定區(qū)域的日期格式。FormatStyle提供了四種類型,分別是:FULL、LONG,SHORT、MEDIUM
ofLocalizedTime(FormatStyle dateStyle)返回特定區(qū)域的時間格式。
ofLocalizedDateTime(FormatStyle dateStyle)返回特定區(qū)域的日期時間格式

注:在使用ofLocalizedTime,ofLocalizedDateTime中的FormatStyle.FULL,F(xiàn)ormatStyle.LONG時由于時區(qū)信息問題,通常不存儲在LocalTime,LocalDateTime對象中,因此會報取不到值的錯誤。如:

private static final DateTimeFormatter TIME_DTF = DateTimeFormatter.ofPattern("hh:mm:ss");
private static final DateTimeFormatter DATE_DTF = DateTimeFormatter.ofPattern("yyyy-MM-dd");
private static final DateTimeFormatter DATE_TIME_DTF = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");

//格式化
System.out.println("日期格式化:" + DATE_DTF.format(nowDate));
System.out.println("時間格式化:" + TIME_DTF.format(nowTime));
System.out.println("日期時間格式化:" + DATE_TIME_DTF.format(nowDateTime));

System.out.println("日期樣式:" + DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).format(nowDate));
System.out.println("日期樣式:" + DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).format(nowDate));
System.out.println("日期樣式:" + DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).format(nowDate));
System.out.println("日期樣式:" + DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG).format(nowDate));

//System.out.println("時間樣式:" + DateTimeFormatter.ofLocalizedTime(FormatStyle.FULL).format(LocalTime.now()));
System.out.println("時間樣式:" + nowTime.format(DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM)));
// System.out.println("時間樣式:" + nowTime.format(DateTimeFormatter.ofLocalizedTime(FormatStyle.LONG)));
System.out.println("時間樣式:" + nowTime.format(DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT)));

System.out.println("日期時間樣式:" + DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).format(nowDateTime));

輸出:

日期格式化:2023-05-11
時間格式化:11:43:48
日期時間格式化:2023-05-11 11:43:48
日期樣式:2023年5月11日 星期四
日期樣式:2023-5-11
日期樣式:23-5-11
日期樣式:2023年5月11日
時間樣式:11:43:48
時間樣式:上午11:43
日期時間樣式:2023-5-11 11:43:48

3、獲取日期的年月日

在Date中獲取月份是從0開始的,因此真正的月份是需要加1的。而LocalDate提供的方法則不需要。

  • getYear() :獲取年份,返回int,
  • getMonthValue() :獲取月份值,相當于是getMonth().getValue()。
  • getMonth() :獲取的是月份枚舉類型,存儲的是英文的月份,可以通過getValue()獲取int的月份
  • getDayOfMonth() :獲取月份中第幾天,
  • getDayOfYear() :獲取當前日期在一年中的第幾天。
  • getDayOfWeek() :獲取星期,返回DayOfWeek枚舉,保存英文星期,通過getValue()獲取數(shù)字星期幾。
//獲取年月日
int year = nowDate.getYear();
int monthValue = nowDate.getMonthValue();
int month = nowDate.getMonth().getValue();
int day = nowDate.getDayOfMonth();
int dayOfYear = nowDate.getDayOfYear();
int dayOfWeek = nowDate.getDayOfWeek().getValue();
System.out.println("year:" + year + ",monthValue:" + monthValue +
        ",month:" + month + ",day:" + day +
        ",dayOfYear:" + dayOfYear + ",dayOfWeek:" + dayOfWeek );

輸出:

year:2023,monthValue:5,month:5,day:11,dayOfYear:131,dayOfWeek:4

4、時間轉換

時間轉換,包括Date轉LocalDate、LocalTime、LocalDateTime;LocalDateTime轉Date,String轉LocalDate、LocalTime、LocalDateTime等。

parse(CharSequence text) :將字符串轉成對應的LocalDate,LocalTime,LocalDateTime。

LocalDate of(int year, int month, int dayOfMonth) /LocalDate of(int year, Month month, int dayOfMonth) :設置年月日,轉成LocalDate。

如下面代碼:

//of()
LocalDate ofDate = LocalDate.of(2022, Month.JANUARY, 31);
        System.out.println("of方法轉LocalDate;" + ofDate);
//String轉LocalDate,LocalTime,LocalDateTime
String date = "2020-01-01";
String time = "11:22:33";
String dateTime = "2021-09-06T09:51:51";
LocalDate localDate = LocalDate.parse(date);
LocalTime localTime= LocalTime.parse(time);
LocalDateTime localDateTime = LocalDateTime.parse(dateTime);
System.out.println("String轉LocalDate,LocalTime,LocalDateTime,LocalDate;" +
        localDate + ",LocalTime:" + localTime + ",LocalDateTime:"+localDateTime);
 //date轉LocalDate,LocalTime,LocalDateTime
Date date1 = new Date();
LocalDate localDate1 = LocalDateTime.ofInstant(date1.toInstant(), ZoneId.systemDefault()).toLocalDate();
LocalDateTime localDateTime1 = LocalDateTime.ofInstant(date1.toInstant(), ZoneId.systemDefault());
LocalTime localTime1 = LocalDateTime.ofInstant(date1.toInstant(), ZoneId.systemDefault()).toLocalTime();
System.out.println("date轉LocalDate,LocalTime,LocalDateTime,LocalDate;" +
    localDate1 + ",LocalTime:" + localTime1 + ",LocalDateTime:"+localDateTime1);
//LocalDateTime轉Date
Date from = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant());
System.out.println("LocalDateTime轉Date;" + from );

輸出:

of方法轉LocalDate;2022-01-31
String轉LocalDate,LocalTime,LocalDateTime,LocalDate;2020-01-01,LocalTime:11:22:33,LocalDateTime:2021-09-06T09:51:51
date轉LocalDate,LocalTime,LocalDateTime,LocalDate;2023-05-11,LocalTime:14:30:02.562,LocalDateTime:2023-05-11T14:30:02.562
LocalDateTime轉Date;Thu May 11 14:30:02 CST 2023

5、日期比較

LocalDate中提供了equals,isAfter,isBefore等方法來對日期進行比較,這對于我們業(yè)務代碼中時間判斷帶來了很大的方法。

equals(Object obj) :對比兩個日期是否相等,查看源碼會發(fā)現(xiàn),首先比較的是對象是否一樣,然后分別做年,月,日的差是否等于0來進行比較。true:表示相等,false:表示不相等

compareTo(ChronoLocalDate other) :比較日期,0:表示相等,正數(shù):表示大于,負數(shù):表示小于。

isAfter(ChronoLocalDate other) :日期是否在other之后,true:表示是,false:表示否。相當于compareTo正負數(shù)。

isBefore(ChronoLocalDate other) :日期是否在other之前,true:表示是,false:表示否。相當于compareTo正負數(shù)。

//時間比較
LocalDate firDate = LocalDate.of(2022, 11, 23);
LocalDate secDate = LocalDate.of(2023, 11, 23);
LocalDate thrDate = LocalDate.of(2021, 11, 23);
//equals
System.out.println("equals:" + firDate.equals(secDate));
//compareTo
System.out.println("compareTo1:" + secDate.compareTo(thrDate));
System.out.println("compareTo2:" + thrDate.compareTo(firDate));
//isAfter
System.out.println("isAfter:" + firDate.isAfter(secDate));
System.out.println("isAfter:" + secDate.isAfter(thrDate));
//isBefore
System.out.println("isBefore:" + firDate.isBefore(secDate));
System.out.println("isBefore:" + secDate.isBefore(thrDate));

輸出:

equals:false
compareTo1:2
compareTo2:-1
isAfter:false
isAfter:true
isBefore:true
isBefore:false

6、檢查周期性日期

在日常生活中,有許多紀念意義的日期,比如說生日,國慶等等。這時候需要進行周期性檢查來做一些提醒,比如:老婆的生日,這要是忘了估計跪榴蓮都是輕的。哈哈哈

MonthDay這個類,就提供了of,from來獲取月份與當前月份中第幾天,然后使用equals進行比較即可。

//周期性檢查
LocalDate birthDay = LocalDate.of(1991, 5, 11);
MonthDay birthMonth = MonthDay.of(birthDay.getMonth(), birthDay.getDayOfMonth());
MonthDay nowMonth = MonthDay.from(nowDate);
if (Objects.equals(birthMonth,nowMonth)){
    System.out.println("生日到了!");
} else {
    System.out.println("萬幸,還好生日還沒到呢,差點忘了......!");
}

輸出:

生日到了!

7、日期計算

前段時間做了一個需求,需要獲取前13個月的日期,這是使用LocalDate就比較方便,來看看LocalDate提供的方法。

提前:

minus(long amountToSubtract, TemporalUnit unit) :計算提前的日期,ChronoUnit實現(xiàn)了TemporalUnit接口,提供了各種日期類型,例如:

ChronoUnit.MONTHS,表示日期。

minusMonths(long monthsToSubtract) :計算提前月份的日期。

minusDays(long daysToSubtract) :計算提前天數(shù)的日期。

minusWeeks(long weeksToSubtract) :計算提前星期的日期。

minusYears(long yearsToSubtract) :計算提前年份的日期。

推后:

plus(long amountToSubtract, TemporalUnit unit) :計算推后的日期,ChronoUnit實現(xiàn)了TemporalUnit接口,提供了各種日期類型,例如:

ChronoUnit.MONTHS,表示日期。

plusMonths(long monthsToSubtract) :計算推后月份的日期。

plusDays(long daysToSubtract) :計算推后天數(shù)的日期。

plusWeeks(long weeksToSubtract) :計算推后星期的日期。

plusYears(long yearsToSubtract) :計算推后年份的日期。

LocalDate nowDate = LocalDate.now();
//日期計算
//提前
System.out.println("兩個月前的日期:" +  nowDate.minusMonths(2));
System.out.println("20天前的日期:" + nowDate.minusDays(20));
System.out.println("1星期前的日期:" + nowDate.minusWeeks(1));
System.out.println("1年前的日期:" + nowDate.minusYears(1));
System.out.println("1個月前的日期:" + nowDate.minus(1, ChronoUnit.MONTHS));
//推后
System.out.println("兩個月后的日期:" + nowDate.plusMonths(2));
System.out.println("20天后的日期:" + nowDate.plusDays(20));
System.out.println("1星期后的日期:" + nowDate.plusWeeks(1));
System.out.println("1年后的日期:" + nowDate.plusYears(1));
System.out.println("1個月后的日期:" + nowDate.plus(1,ChronoUnit.MONTHS));

輸出:

兩個月前的日期:2023-03-11
20天前的日期:2023-04-21
1星期前的日期:2023-05-04
1年前的日期:2022-05-11
1個月前的日期:2023-04-11
兩個月后的日期:2023-07-11
20天后的日期:2023-05-31
1星期后的日期:2023-05-18
1年后的日期:2024-05-11
1個月后的日期:2023-06-11

8、處理時區(qū)

java8將時區(qū)也分離了出來,用ZoneId來處理特定時區(qū)。

ZoneDateTime:表示某時區(qū)下的時間。

//時區(qū)
ZonedDateTime of = ZonedDateTime.of(nowDateTime, ZoneId.of("Asia/Shanghai"));
System.out.println("時區(qū):" + of);

輸出:

時區(qū):2023-05-11T16:17:11.479+08:00[Asia/Shanghai]

9、獲取時間戳

java8提供了Instant類來對時間戳進行操作。

System.out.println("時間戳:" + Instant.now().getEpochSecond());

時間戳返回的是秒級別的數(shù)據(jù)。

輸出:

時間戳:1683794339

10、閏年判斷

isLeapYear() :可以直接查詢日期是否為閏年。true:表示是,false:表示否。

boolean leapYear = nowDate.isLeapYear();
if (leapYear){
    System.out.println("閏年!");
} else {
    System.out.println("不是閏年!");
}

輸出:

不是閏年!

11、獲取第一天和最后一天

有時候我們業(yè)務需要獲取當月或當年的第一天日期或最后一天日期,TemporalAdjusters類提供了一些方法可以直接實現(xiàn)。

  • TemporalAdjusters.lastDayOfMonth() :月份的最后一天日期。
  • TemporalAdjusters.firstDayOfMonth() :月份的第一天日期。
  • TemporalAdjusters.lastDayOfYear() :年份的最后一天日期。
  • TemporalAdjusters.firstDayOfYear() :年份的第一天日期。

例如:獲取當月/當年的第一天日期和最后一天日期。

//獲取當月第一天和最后一天
LocalDate lastDay = nowDate.with(TemporalAdjusters.lastDayOfMonth());
LocalDate firstDay = nowDate.with(TemporalAdjusters.firstDayOfMonth());
System.out.println("當月第一天:"+firstDay + ";當月最后一天:" + lastDay);
//獲取當年第一天和最后一天
LocalDate lastYearDay = nowDate.with(TemporalAdjusters.lastDayOfYear());
LocalDate firstYearDay = nowDate.with(TemporalAdjusters.firstDayOfYear());
System.out.println("當年第一天:"+firstYearDay + ";當月最后一天:" + lastYearDay);

輸出:

當月第一天:2023-05-01;當月最后一天:2023-05-31
當年第一天:2023-01-01;當月最后一天:2023-12-31

上述就是我在工作用到的一些java8日期時間的方法,存在完

以上就是Java8不可或缺小幫手之日期應用的詳細內容,更多關于Java8日期的資料請關注腳本之家其它相關文章!

相關文章

  • 關于SpringBoot禁止循環(huán)依賴解說

    關于SpringBoot禁止循環(huán)依賴解說

    這篇文章主要介紹了關于SpringBoot禁止循環(huán)依賴解說,Spring的Bean管理,文章圍繞主題展開詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • 詳解springboot讀取yml配置的幾種方式

    詳解springboot讀取yml配置的幾種方式

    這篇文章主要介紹了詳解springboot讀取yml配置的幾種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • MyBatis批量查詢、插入、更新、刪除的實現(xiàn)示例

    MyBatis批量查詢、插入、更新、刪除的實現(xiàn)示例

    由于需要處理短時間內大量數(shù)據(jù)入庫的問題,想到了Mybatis的批量操作,本文主要介紹了MyBatis批量查詢、插入、更新、刪除的實現(xiàn)示例,感興趣的可以了解一下
    2023-05-05
  • Java實現(xiàn)一個順序表的完整代碼

    Java實現(xiàn)一個順序表的完整代碼

    順序表是用一段物理地址連續(xù)的存儲單元依次存儲數(shù)據(jù)元素的線性結構,一般采用數(shù)組存儲。在數(shù)組上完成數(shù)據(jù)的增刪減改。順序表的底層是一個數(shù)組
    2021-04-04
  • mybatis-plus?分頁類型轉換工具類

    mybatis-plus?分頁類型轉換工具類

    用mybatis-plus?的分頁對象的時候,因為用mybatis-puls?查詢出來的分頁對象的records里的泛型是實體,有時候需要將實體轉換為前端展示的對象,所有寫了一個分頁數(shù)據(jù)的類型轉換工具,解決這個問題,對mybatis-plus?分頁工具類相關知識感興趣的朋友一起看看吧
    2022-03-03
  • 詳解Java中實現(xiàn)SHA1與MD5加密算法的基本方法

    詳解Java中實現(xiàn)SHA1與MD5加密算法的基本方法

    這篇文章主要介紹了詳解Java中實現(xiàn)SHA1與MD5加密算法的基本方法,安全哈希算法第一版和消息摘要算法第五版也是通常人們最常用的加密算法,需要的朋友可以參考下
    2016-04-04
  • spring boot配置MySQL數(shù)據(jù)庫連接、Hikari連接池和Mybatis的簡單配置方法

    spring boot配置MySQL數(shù)據(jù)庫連接、Hikari連接池和Mybatis的簡單配置方法

    這篇文章主要介紹了spring boot配置MySQL數(shù)據(jù)庫連接、Hikari連接池和Mybatis的簡單配置方法,需要的朋友可以參考下
    2018-03-03
  • springboot2.3 整合mybatis-plus 高級功能(圖文詳解)

    springboot2.3 整合mybatis-plus 高級功能(圖文詳解)

    這篇文章主要介紹了springboot2.3 整合mybatis-plus 高級功能,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 如何開發(fā)基于Netty的HTTP/HTTPS應用程序

    如何開發(fā)基于Netty的HTTP/HTTPS應用程序

    HTTP/HTTPS是最常見的協(xié)議套件之一,并且隨著智能手機的成功,它的應用也日益廣泛,因為對于任何公司來說,擁有一個可以被移動設備訪問的網站幾乎是必須的。下面就來看看如何開發(fā)基于Netty的HTTP/HTTPS應用程序
    2021-06-06
  • Spring?中?PageHelper?不生效問題及解決方法

    Spring?中?PageHelper?不生效問題及解決方法

    這篇文章主要介紹了Spring?中?PageHelper?不生效問題,使用這個插件時要注意版本的問題,不同的版本可能 PageHelper 不會生效,本文結合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-12-12

最新評論