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

Java8日期類LocalDate、LocalTime和LocalDateTime使用方法詳解

 更新時間:2023年11月25日 15:34:34   作者:流水武qin  
這篇文章主要給大家介紹了關(guān)于Java8日期類LocalDate、LocalTime和LocalDateTime使用方法的相關(guān)資料,LocalDateTime是JDK1.8出現(xiàn)的新特性,解決線程不安全的問題,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

一、Java8之前日期類所存在的問題

Java8之前通常會使用Date結(jié)合 SimpleDateFormat、Calender來處理時間和日期的相關(guān)需求。

但是這些API也存在明顯的缺點:

  • 可讀性差、易用性差、使用起來冗余繁瑣

  • java.util.Date 是非線程安全的

  • java.util.Date 存在千年蟲問題、并且不支持國際化和時區(qū)、故大部分方法被聲明為過時、不建議再使用

  • java.utiljava.sql兩包中都有Date類,設(shè)計上并不合理

java8java.time包下重新實現(xiàn)了日期相關(guān)類。

每個類功能明確清晰、類之間協(xié)作簡單、API 定義清晰、功能強大無需借助外部工具類,并且線程安全。

二、Java8新增日期類

Java8新增的日期類主要有三個:

  • LocalDate:表示日期(年月日)

  • LocalTime :表示時間(時分秒)

  • LocalDateTime:表示時間+ 日期 (年月日時分秒),是java8最常用的日期類

這些類使用了final來修飾,使得這些類是不可變的,一旦實例化,值就固定了,有點類似于String類。

因此它們都是線程安全的。

2.1 LocalDate

2.1.1 常用API

方法描述
static LocalDate now()獲取默認時區(qū)的當前日期對象
static LocalDate now(Clock clock)從指定時鐘獲取當前日期對象
static LocalDate now(ZoneId zone)獲取指定時區(qū)的當前日期對象
of根據(jù)指定年月日創(chuàng)建LocalDate對象
getYear獲得年份
getMonthValue獲得月份(1-12)
getMonth獲得月份枚舉值
getDayOfMonth獲得月份中的第幾天(1-31)
getDayOfWeek獲得星期幾
getDayOfYear獲得年份中的第幾天(1-366)
lengthOfYear獲得當年總天數(shù)
lengthOfMonth獲得當月總天數(shù)
toEpochDay與時間紀元(1970年1月1日)相差的天數(shù)
plusDays加天
plusWeeks加周
plusMonths加月
plusYears加年
minusDays減年
minusWeeks減周
minusMonths減月
minusYears減年
withYear替換年份
withMonth替換月份
withDayOfMonth替換月份中的第幾天(1-31)
withDayOfYear替換年份中的第幾天(1-366)
isBefore是否日期在之前
isAfter是否日期在之后
isEqual是否是當前日期
isleapYear是否是閏年

2.1.2 使用示例

1)創(chuàng)建方法

LocalDate now1 = LocalDate.now();							// 當前日期 
LocalDate now2 = LocalDate.now(ZoneId.of("Asia/Shanghai"));	// 當前日期 (指定時區(qū))
LocalDate now3 = LocalDate.now(Clock.systemDefaultZone());	// 當前日期 (指定時鐘)
LocalDate localDate = LocalDate.of(2023, 1, 1);				// 指定日期 2023-01-01

2)獲取方法

LocalDate now = LocalDate.now();
int year = now.getYear();						// 獲取年份
int month = now.getMonthValue();				// 獲取月份(1-12)
Month monthEnum = now.getMonth();				// 獲取月份的枚舉值
int dayOfMonth = now.getDayOfMonth();			// 獲取月份中的第幾天(1-31)
int dayOfYear = now.getDayOfYear();				// 獲取一年中的第幾天(1-366)
DayOfWeek dayOfWeek = now.getDayOfWeek();		// 獲取現(xiàn)在是星期幾
int dayOfYear = now.getDayOfYear();				// 獲取一年中的第幾天(1-366)
int lengthOfYear = now.lengthOfYear();			// 獲得當年總天數(shù)
int lengthOfMonth = now.lengthOfMonth();		// 獲得當月總天數(shù)
long epochDay = now.toEpochDay();				// 與時間紀元(1970年1月1日)相差的天數(shù)

3)運算方法

LocalDate now = LocalDate.now();
LocalDate localDate1 = now.plusDays(1);			// 給當前時間加一天
LocalDate localDate2 = now.plusDays(1);			// 給當前時間加一周
LocalDate localDate3 = now.plusMonths(1);		// 給當前時間加一月
LocalDate localDate4 = now.plusYears(1);		// 給當前時間加一年
LocalDate localDate5 = now.minusDays(1);		// 給當前時間減一天
LocalDate localDate6 = now.minusWeeks(1);		// 給當前時間減一周
LocalDate localDate7 = now.minusMonths(1);		// 給當前時間減一月
LocalDate localDate8 = now.minusYears(1);		// 給當前時間減一年

4)修改方法

LocalDate now = LocalDate.now();
LocalDate localDate1 = now.withYear(2020);		// 修改日期對象年份為2020
LocalDate localDate2 = now.withMonth(1);		// 修改日期對象月份為1
LocalDate localDate3 = now.withDayOfMonth(1);	// 修改日期對象的日期(一月中的第幾天)
LocalDate localDate4 = now.withDayOfYear(1);	// 修改日期對象的日期(一年中的第幾天)

5)比較方法

LocalDate now = LocalDate.now();
LocalDate localDate = LocalDate.of(2023, 1, 1)
    
boolean isBefore = localDate.isBefore(now);		// localDate是否在當天之前
boolean isAfter = localDate.isAfter(now);		// localDate是否在當天之后
boolean isEqual = localDate.isEqual(now);		// localDate是否在當天
boolean isLeapYear = localDate.isLeapYear();	// localDate是否是閏年

6)LocalDate 與 Date之間的轉(zhuǎn)換

/**
 * LocalDate轉(zhuǎn)Date
 * @param localDate
 * @return
 */
public static Date toDate(LocalDate localDate) {
    return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
}

/**
 * Date轉(zhuǎn)LocalDate
 * @param Date
 * @return
 */
public static Date toLocalDate(Date date) {
    return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}

7)LocalDate 與 String之間的轉(zhuǎn)換

/**
  * String轉(zhuǎn)LocalDate
  * @param dateStr 	   日期的字符串
  * @param pattern 	   格式示例: yyyy-MM-dd
  * @return
  */
public static LocalDate toLocalDate(String dateStr, String pattern) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
    return LocalDate.parse(dateStr, formatter);
}

/**
  * LocalDate轉(zhuǎn)String
  * @param localDate   localDate對象
  * @param pattern 	   格式示例: yyyy-MM-dd
  * @return
  */
public static String LocalDatetoStr(LocalDate localDate, String pattern) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
    return localDate.format(formatter);
}

2.2 LocalTime

2.2.1 常用API

方法描述
static LocalTime now()獲取默認時區(qū)的當前時間
static LocalTime now(ZoneId zone)獲取指定時區(qū)的當前時間
static LocalTime now(Clock clock)從指定時鐘獲取當前時間
of根據(jù)指定的時、分、秒獲取LocalTime 實例
getHour獲取小時
getMinute獲取分鐘
getSecond獲取秒
getNano獲取納秒
plusHours增加小時數(shù)
plusMinutes增加分鐘數(shù)
plusSeconds增加秒數(shù)
plusNanos增加納秒數(shù)
minusHours減少小時數(shù)
minusMinutes減少分鐘數(shù)
minusSeconds減少秒數(shù)
minusNanos減少納秒數(shù)
withHour替換小時
withMinute替換分鐘
withSecond替換秒鐘
withNano替換納秒
compareTo時間與另一個時間比較
isAfter檢查時間是否在指定時間之后
isBefore檢查時間是否在指定時間之前

2.2.2 使用示例

1)創(chuàng)建方法

LocalTime now1 = LocalTime.now();							// 當前時間 
LocalTime now2 = LocalTime.now(ZoneId.of("Asia/Shanghai"));	// 當前時間 (指定時區(qū))
LocalTime now3 = LocalTime.now(Clock.systemDefaultZone());	// 當前時間 (指定時鐘)
LocalTime localTime = LocalTime.of(9, 9, 9);				// 指定時間 09:09:09

2)獲取方法

LocalTime now = LocalTime.now();
int hour = now.getHour();						// 獲取小時
int minute = now.getMinute();					// 獲取小時
int second = now.getSecond();					// 獲取秒
int nano = now.getNano();						// 獲取納秒

3)運算方法

LocalTime now = LocalTime.now();
LocalTime localTime1 = now.plusHours(1);		// 給當前時間加一小時	
LocalTime localTime2 = now.plusMinutes(1);		// 給當前時間加一分鐘	
LocalTime localTime3 = now.plusSeconds(1);		// 給當前時間加一秒
LocalTime localTime4 = now.plusNanos(1);		// 給當前時間加一納秒
LocalTime localTime1 = now.minusHours(1);		// 給當前時間減一小時
LocalTime localTime2 = now.minusMinutes(1);		// 給當前時間減一分鐘	
LocalTime localTime3 = now.minusSeconds(1);		// 給當前時間減一秒
LocalTime localTime4 = now.minusNanos(1);		// 給當前時間減一納秒

4)修改方法

LocalTime now = LocalTime.now();
LocalDate localTime1 = now.withHour(1);			// 修改時間對象小時為1
LocalDate localTime2 = now.withMinute(1);		// 修改時間對象分鐘為1
LocalDate localTime3 = now.withSecond(1);		// 修改時間對象秒鐘為1
LocalDate localTime4 = now.withNano(1);			// 修改時間對象納秒為1

5)比較方法

LocalTime now = LocalTime.now();
LocalTime localTime = LocalTime.of(9, 9, 9);
int compare = localTime.compareTo(now);		// localTime和當前時間比較--0(相等)正數(shù)(大)負數(shù)(小)
boolean after = localTime.isAfter(now);		// localTime是否在當前時間之后
boolean before = localTime.isBefore(now);	// localTime是否在當前時間之前

6)LocalTime 與 String之間的轉(zhuǎn)換

/**
  * String轉(zhuǎn)LocalTime
  * @param timeStr 	   日期的字符串
  * @param pattern 	   格式示例: HH:mm:ss
  * @return
  */
public static LocalTime toLocalTime(String timeStr, String pattern) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
    return LocalTime.parse(timeStr, formatter);
}

/**
  * LocalTime轉(zhuǎn)String
  * @param localTime   localTime對象
  * @param pattern 	   格式示例: HH:mm:ss
  * @return
  */
public static LocalTime localTimeToStr(LocalTime localTime, String pattern) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
    return localTime.format(formatter);
}

LocalTime是無法轉(zhuǎn)換為Date的,因為它值包含了時間部分,而沒有日期部分

2.3 LocalDateTime

2.2.1 常用API

方法描述
static LocalDateTime now()獲取默認時區(qū)的當前日期時間
static LocalDateTime now(Clock clock)從指定時鐘獲取當前日期時間
static LocalDateTime now(ZoneId zone)獲取指定時區(qū)的當前日期時間
static LocalDateTime of(LocalDate date, LocalTime time)根據(jù)日期和時間對象獲取LocalDateTime 對象
static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second)根據(jù)指定的年、月、日、時、分、秒獲取LocalDateTime 實例
getYear獲取年份
getMonth使用月份枚舉類獲取月份
getDayOfMonth獲取日期在該月是第幾天
getDayOfWeek獲取日期是星期幾
getDayOfYear獲取日期在該年是第幾天
getHour獲取小時
getMinute獲取分鐘
getSecond獲取秒
getNano獲取納秒
plusYears增加年
plusMonths增加月
plusWeeks增加周
plusDays增加天
plusHours增加小時
plusMinutes增加分
plusSeconds增加秒
plusNanos增加納秒
minusYears減少年
minusMonths減少月
meminusWeeks減少周
minusDays減少天
minusHours減少小時
minusMinutes減少分
minusSeconds減少秒
minusNanos減少納秒
withYear替換年份
withMonth替換月份
withDayOfMonth替換月份中的第幾天(1-31)
withDayOfYear替換年份中的第幾天(1-366)
withHour替換小時
withMinute替換分鐘
withSecond替換秒鐘
withNano替換納秒
isEqual判斷日期時間是否相等
isBefore檢查是否在指定日期時間之前
isAfter檢查是否在指定日期時間之后

2.2.2 使用示例

1)創(chuàng)建方法

// 1.當前日期
LocalDateTime now1 = LocalDateTime.now();
// 2.當前日期 (指定時區(qū))
LocalDateTime now2 = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
// 3.當前日期 (指定時鐘)
LocalDateTime now3 = LocalDateTime.now(Clock.systemDefaultZone());
// 4.指定日期 2023-01-01 01:01:00
LocalDateTime localDateTime1 = LocalDateTime.of(2023, 1, 1, 1, 1);
// 4.使用LocalDate和LocalTime對象創(chuàng)建LocalDateTime對象
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime2 = LocalDateTime.of(localDate, localTime);

2)獲取方法

LocalDateTime now = LocalDateTime.now();
int year = now.getYear();                   	// 獲取年份
Month month = now.getMonth();               	// 使用月份枚舉值
int dayOfMonth = now.getDayOfMonth();       	// 獲取日期在該月是第幾天
DayOfWeek dayOfWeek = now.getDayOfWeek();  		// 獲取日期是星期幾
int dayOfYear = now.getDayOfYear();         	// 獲取日期在該年是第幾天
int hour = now.getHour();                   	// 獲取小時
int minute = now.getMinute();               	// 獲取分鐘
int second = now.getSecond();               	// 獲取秒鐘
int nano = now.getNano();                   	// 獲取納秒

3)運算方法

LocalDateTime now = LocalDateTime.now();
LocalDateTime localDateTime1 = now.plusDays(1);			// 給當前時間加一天
LocalDateTime localDateTime2 = now.plusDays(1);			// 給當前時間加一周
LocalDateTime localDateTime3 = now.plusMonths(1);		// 給當前時間加一月
LocalDateTime localDateTime4 = now.plusYears(1);		// 給當前時間加一年
LocalDateTime localDateTime5 = now.plusHours(1);		// 給當前時間加一小時
LocalDateTime localDateTime6 = now.plusMinutes(1);		// 給當前時間加一分鐘
LocalDateTime localDateTime7 = now.plusSeconds(1);		// 給當前時間加一秒
LocalDateTime localDateTime8 = now.plusNanos(1);		// 給當前時間加一納秒
LocalDateTime localDateTime9 = now.minusDays(1);		// 給當前時間減一天
LocalDateTime localDateTime10 = now.minusWeeks(1);		// 給當前時間減一周
LocalDateTime localDateTime11 = now.minusMonths(1);		// 給當前時間減一月
LocalDateTime localDateTime12 = now.minusYears(1);		// 給當前時間減一年
LocalDateTime localDateTime13 = now.minusHours(1);		// 給當前時間減一小時
LocalDateTime localDateTime14 = now.minusMinutes(1);	// 給當前時間減一分鐘
LocalDateTime localDateTime15 = now.minusSeconds(1);	// 給當前時間減一秒
LocalDateTime localDateTime16 = now.minusNanos(1);		// 給當前時間減一納秒

4)修改方法

LocalDateTime now = LocalDateTime.now();
LocalDateTime localDate1 = now.withYear(2020);		    // 修改日期對象年份為2020
LocalDateTime localDate2 = now.withMonth(1);		    // 修改日期對象月份為1
LocalDateTime localDate3 = now.withDayOfMonth(1);	    // 修改日期對象的日期(一月中的第幾天)
LocalDateTime localDate4 = now.withDayOfYear(1);	    // 修改日期對象的日期(一年中的第幾天)
LocalDateTime localTime1 = now.withHour(1);			    // 修改時間對象小時為1
LocalDateTime localTime2 = now.withMinute(1);		    // 修改時間對象分鐘為1
LocalDateTime localTime3 = now.withSecond(1);		    // 修改時間對象秒鐘為1
LocalDateTime localTime4 = now.withNano(1);				// 修改時間對象納秒為1

5)比較方法

LocalDateTime now = LocalDateTime.now();
LocalDateTime localDateTime = LocalDateTime.of(2023, 1, 1, 1, 1);
boolean isBefore = localDateTime.isBefore(now);			// localDateTime是否在當天之前
boolean isAfter = localDateTime.isAfter(now);		    // localDateTime是否在當天之后
boolean isEqual = localDateTime.isEqual(now);		    // localDateTime是否在當天

6)從LocalDateTime獲取LocalDate或者LocalTime

LocalDateTime localDateTime = LocalDateTime.now();
LocalDate localDate = localDateTime.toLocalDate();    // 從LocalDateTime獲取LocalDate對象
LocalTime localTime = localDateTime.toLocalTime();    // 從LocalDateTime獲取LocalTime對象

7)LocalDateTime與 String之間的轉(zhuǎn)換

/**
  * String轉(zhuǎn)LocalDateTime
  * @param dateTimeStr 日期的字符串
  * @param pattern 	   格式示例: yyyy-MM-dd HH:mm:ss
  * @return
  */
public static LocalDateTime toLocalDateTime(String dateTimeStr, String pattern) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
    return LocalDateTime.parse(dateTimeStr, formatter);
}

/**
  * LocalDateTime轉(zhuǎn)String
  * @param localDateTime 日期時間對象
  * @param pattern 	   	 格式示例: yyyy-MM-dd HH:mm:ss
  * @return
  */
public static String LocalDateTimetoStr(LocalDateTime localDateTime, String pattern) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
    return localDateTime.format(formatter);
}

8)LocalDateTime與 Date之間的轉(zhuǎn)換

/**
  * Date轉(zhuǎn)LocalDateTime
  * @param date          jdk6 日期對象
  * @param zoneId        時區(qū)id
  * @return
  */
public static LocalDateTime toLocalDateTime(Date date, ZoneId zoneId) {
    // toInstant():將Date對象轉(zhuǎn)換成為Instant(瞬時)對象
    // ofInstant(): 將瞬時對象轉(zhuǎn)換成為LocalDateTime對象
    Instant instant = date.toInstant();
    if (zoneId == null) {
        zoneId = ZoneId.systemDefault();
    }
    return LocalDateTime.ofInstant(instant, zoneId);
}

/**
  * LocalDateTime轉(zhuǎn)Date
  * @param localDateTime  日期時間對象
  * @return
  */
public static Date LocalDateTimetoDate(LocalDateTime localDateTime, ZoneId zoneId) {
    if (zoneId == null) {
        zoneId = ZoneId.systemDefault();
    }
    ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);
    Instant instant = zonedDateTime.toInstant();
    return Date.from(instant);
}

總結(jié) 

到此這篇關(guān)于Java8日期類LocalDate、LocalTime和LocalDateTime使用方法詳解的文章就介紹到這了,更多相關(guān)Java8日期類詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot實現(xiàn)AOP切面的三種方式

    SpringBoot實現(xiàn)AOP切面的三種方式

    Spring,SpringBoot框架憑借多種高效機制,顯著增強了代碼的功能性,并實現(xiàn)了切面編程(AOP)的精髓,其核心亮點之一,是運用動態(tài)代理技術(shù),無需觸動源代碼即可在Bean的運行時為其動態(tài)織入額外功能,本文給大家介紹了SpringBoot通過3種方式實現(xiàn)AOP切面,需要的朋友可以參考下
    2024-08-08
  • 關(guān)于Java中的dozer對象轉(zhuǎn)換問題

    關(guān)于Java中的dozer對象轉(zhuǎn)換問題

    Dozer是Java?Bean到Java?Bean映射器,它以遞歸方式將數(shù)據(jù)從一個對象復制到另一個對象,這篇文章主要介紹了Java中的dozer對象轉(zhuǎn)換的操作方法,需要的朋友可以參考下
    2022-08-08
  • SpringBoot注冊web組件的實現(xiàn)方式

    SpringBoot注冊web組件的實現(xiàn)方式

    Servlet是Java Web應用程序的基礎(chǔ),它提供了處理客戶端請求的機制,Servlet三大組件是指Servlet、Filter和Listener,它們是Java Web應用程序的核心組件,本文將給大家介紹一下SpringBoot注冊web組件的實現(xiàn)方式,需要的朋友可以參考下
    2023-10-10
  • Golang Protocol Buffer案例詳解

    Golang Protocol Buffer案例詳解

    這篇文章主要介紹了Golang Protocol Buffer案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java實習打卡8道面試題

    Java實習打卡8道面試題

    臨近秋招,備戰(zhàn)暑期實習,祝大家每天進步億點點!本篇文章準備了十道java的常用面試題,希望能夠給大家提供幫助,最后祝大家面試成功,進入自己心儀的大廠
    2021-06-06
  • Java中關(guān)于 null 的幾種處理方式詳解

    Java中關(guān)于 null 的幾種處理方式詳解

    這篇文章主要介紹了Java中關(guān)于 null 的幾種處理方式,關(guān)于 null ,你應該知道下面這幾件事情來有效的了解 null ,從而避免很多由 null 引起的錯誤,具體細節(jié)跟隨小編一起學習下吧
    2021-10-10
  • Java并發(fā)工具類LongAdder原理實例解析

    Java并發(fā)工具類LongAdder原理實例解析

    這篇文章主要介紹了Java并發(fā)工具類LongAdder原理實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • MybatisPlus 連表查詢、邏輯刪除功能實現(xiàn)(多租戶)

    MybatisPlus 連表查詢、邏輯刪除功能實現(xiàn)(多租戶)

    這篇文章主要介紹了MybatisPlus 連表查詢、邏輯刪除功能實現(xiàn)(多租戶),本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Java文件、文件夾權(quán)限修改的兩種方法

    Java文件、文件夾權(quán)限修改的兩種方法

    這篇文章主要給大家介紹了關(guān)于Java文件、文件夾權(quán)限修改的兩種方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • SpringBoot對接Spark過程詳解

    SpringBoot對接Spark過程詳解

    這篇文章主要介紹SpringBoot接入Spark的方法的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望能幫助大家解決問題
    2023-02-02

最新評論