最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

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

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

java8java.time包下重新實現了日期相關類。

每個類功能明確清晰、類之間協(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根據指定年月日創(chuàng)建LocalDate對象
getYear獲得年份
getMonthValue獲得月份(1-12)
getMonth獲得月份枚舉值
getDayOfMonth獲得月份中的第幾天(1-31)
getDayOfWeek獲得星期幾
getDayOfYear獲得年份中的第幾天(1-366)
lengthOfYear獲得當年總天數
lengthOfMonth獲得當月總天數
toEpochDay與時間紀元(1970年1月1日)相差的天數
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();		// 獲取現在是星期幾
int dayOfYear = now.getDayOfYear();				// 獲取一年中的第幾天(1-366)
int lengthOfYear = now.lengthOfYear();			// 獲得當年總天數
int lengthOfMonth = now.lengthOfMonth();		// 獲得當月總天數
long epochDay = now.toEpochDay();				// 與時間紀元(1970年1月1日)相差的天數

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之間的轉換

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

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

7)LocalDate 與 String之間的轉換

/**
  * String轉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轉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根據指定的時、分、秒獲取LocalTime 實例
getHour獲取小時
getMinute獲取分鐘
getSecond獲取秒
getNano獲取納秒
plusHours增加小時數
plusMinutes增加分鐘數
plusSeconds增加秒數
plusNanos增加納秒數
minusHours減少小時數
minusMinutes減少分鐘數
minusSeconds減少秒數
minusNanos減少納秒數
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(相等)正數(大)負數(小)
boolean after = localTime.isAfter(now);		// localTime是否在當前時間之后
boolean before = localTime.isBefore(now);	// localTime是否在當前時間之前

6)LocalTime 與 String之間的轉換

/**
  * String轉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轉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是無法轉換為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)根據日期和時間對象獲取LocalDateTime 對象
static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second)根據指定的年、月、日、時、分、秒獲取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之間的轉換

/**
  * String轉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轉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之間的轉換

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

/**
  * LocalDateTime轉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);
}

總結 

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

相關文章

  • Springboot?Shiro?anno不啟作用問題及解決

    Springboot?Shiro?anno不啟作用問題及解決

    在Shiro配置中遇到靜態(tài)資源被攔截的問題,通過排除LinkedHashMap過濾次序和將過濾器手動創(chuàng)建而不是注冊到容器中解決,同時,確保JwtUtil類也不注冊到容器中,以避免請求報Not?authorized錯誤
    2026-03-03
  • SpringCloud實現全鏈路灰度發(fā)布的示例詳解

    SpringCloud實現全鏈路灰度發(fā)布的示例詳解

    灰度發(fā)布是指在軟件或服務發(fā)布過程中,將新版本的功能或服務以較小的比例引入到生產環(huán)境中,僅向部分用戶或節(jié)點提供新功能的一種發(fā)布策略,下面我們就來學習一下SpringCloud如何實現全鏈路灰度發(fā)布
    2023-11-11
  • Java中ArrayList集合的常用方法大全

    Java中ArrayList集合的常用方法大全

    這篇文章主要給大家介紹了關于Java中ArrayList集合的常用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • SpringBoot 內置 CollectionUtil用法實戰(zhàn)指南

    SpringBoot 內置 CollectionUtil用法實戰(zhàn)指南

    文章介紹了SpringBoot中自帶的CollectionUtil類,包括判空、轉換、合并、匹配和兜底功能,并通過實戰(zhàn)例子詳細展示了這些功能的應用場景和優(yōu)勢,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • java新人基礎入門之遞歸調用

    java新人基礎入門之遞歸調用

    這篇文章主要給大家介紹了關于java新人基礎入門之遞歸調用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • SpringBoot中分頁插件PageHelper的使用詳解

    SpringBoot中分頁插件PageHelper的使用詳解

    分頁查詢是為了高效展示大量數據,通過分頁將數據劃分為多個部分逐頁展示,原生方法需手動計算數據起始行,而使用PageHelper插件則簡化這一過程,本文給大家介紹SpringBoot中分頁插件PageHelper的使用,感興趣的朋友一起看看吧
    2024-09-09
  • java兩個線程同時寫一個文件

    java兩個線程同時寫一個文件

    這篇文章主要為大家詳細介紹了java兩個線程同時寫一個文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • MyBatis-Plus攔截器實現數據權限控制的方法

    MyBatis-Plus攔截器實現數據權限控制的方法

    MyBatis-Plus是一款基于MyBatis的增強工具,它提供了一些便捷的功能和增強的查詢能力,數據權限控制是在系統(tǒng)中對用戶訪問數據進行限制的一種機制,這篇文章主要給大家介紹了關于MyBatis-Plus攔截器實現數據權限控制的相關資料,需要的朋友可以參考下
    2024-01-01
  • SpringBoot3解決跨域請求的方案小結

    SpringBoot3解決跨域請求的方案小結

    解決跨域請求,主要有JSONP,iframe,window.name,CORS等方式,其中CORS方式是最常用的跨域實現方式,而且是對各種請求方法、各種數據請求類型都是完美支持的,本文介紹了SpringBoot3解決跨域請求的方案小結,需要的朋友可以參考下
    2024-07-07
  • SpringBoot控制臺秒變炫彩特效的實現指南

    SpringBoot控制臺秒變炫彩特效的實現指南

    本文介紹如何自定義SpringBoot啟動橫幅,通過banner.txt文件設置ASCII圖案、版本號等,并使用ANSI顏色增強效果,還提供關閉默認Banner、添加啟動信息及彩色提示的實現方法,需要的朋友可以參考下
    2025-10-10

最新評論

芜湖县| 房山区| 临汾市| 泰和县| 军事| 霍州市| 常山县| 治县。| 永新县| 瓦房店市| 邹城市| 贵州省| 新营市| 腾冲县| 泗阳县| 溧阳市| 额尔古纳市| 常宁市| 建始县| 伊金霍洛旗| 鄄城县| 宝山区| 利川市| 康乐县| 攀枝花市| 天祝| 鄂托克前旗| 莒南县| 农安县| 井陉县| 旬阳县| 南皮县| 安达市| 许昌县| 礼泉县| 肇源县| 敦化市| 丹东市| 临安市| 清水县| 扶风县|