在看題的時候發現了Java8中新加入的日期時間類,覺得這個小哥寫的不錯,自己也跟著練習下。原文地址:https://blog.csdn.net/yy139926/article/details/124298574 前言: Java中1.8之前有date類,date類到了1.8大部分的方法被棄而且da ...
在看題的時候發現了Java8中新加入的日期時間類,覺得這個小哥寫的不錯,自己也跟著練習下。原文地址:https://blog.csdn.net/yy139926/article/details/124298574
前言:
Java中1.8之前有date類,date類到了1.8大部分的方法被棄而且date類如果不格式化可讀性十分差,而simpledateformat方法中format和parse方法都是線程不安全的。Java1.8之後出現了localdate,localdatetime,localtime這些類,而這些類使用了final來修飾,使得這些類是不可變的,一旦實例化,值就固定了,有點類似於String類,所以這些類都是線程安全的。
一、LocalDate:年月日
LocalDate類的實例是一個不可變對象,它只提供了簡單的日期,並不含當天的時間信息,這個類是不可變的和線程安全的。
方法 | 描述 |
---|---|
now | 根據當前時間創建LocalDate對象 |
of | 根據指定年月日創建LocalDate對象 |
getYear | 獲得年份 |
getMonthValue | 獲得月份 |
getMonth | 獲得月份枚舉值 |
getDayOfMonth | 獲得月份天數(1-31) |
getDayOfWeek | 獲得星期幾 |
getDayOfYear | 獲得年份中的第幾天(1-366) |
lengthOfYear | 獲得當年總天數 |
lengthOfMonth | 獲得當月總天數 |
toEpochDay | 與時間紀元(1970年1月1日)相差的天數 |
plusDays | 加天 |
plusWeeks | 加周 |
plusMonths | 加月 |
plusYears | 加年 |
minusDays | 減年 |
minusWeeks | 減周 |
minusMonths | 減月 |
minusYears | 減年 |
withYear | 替換年份 |
withYear | 替換年份 |
withDayOfMonth | 替換日期 |
withDayOfYear | 替換日期 |
isBefore | 是否日期在之前 |
isAfter | 是否日期在之後 |
isEqual | 是否是當前日期 |
isleapYear | 是否是閏年 |
1.1、LocalDate常用API
//A.獲取 //(1)獲取當前日期 2022-07-07 System.out.println(LocalDate.now()); //(2)獲取指定日期 2000-03-05 System.out.println(LocalDate.of(2014, 3, 5)); //(3)獲取日期的年份 2022 System.out.println(LocalDate.now().getYear()); //(4)獲取日期的月份 7 System.out.println(LocalDate.now().getMonthValue()); //(5)獲取日期的日子 7 System.out.println(LocalDate.now().getDayOfMonth()); //(6)獲取日期的星期 THURSDAY System.out.println(LocalDate.now().getDayOfWeek()); //(7)當天所在這一年的第幾天 188 System.out.println(LocalDate.now().getDayOfYear()); //(8)獲取當年天數 365 System.out.println(LocalDate.now().lengthOfYear()); //(9)獲取當月天數 31 System.out.println(LocalDate.now().lengthOfMonth()); //(10)與時間紀元(1970年1月1日)相差的天數,負數表示在時間紀元之前多少天 19180 System.out.println(LocalDate.now().toEpochDay()); //B.運算 //(1)加一天 System.out.println("加1天:" + LocalDate.now().plusDays(1)); //(2)加一周 System.out.println("加1周:" + LocalDate.now().plusWeeks(1)); //(3)加一月 System.out.println("加1月:" + LocalDate.now().plusMonths(1)); //(4)加一年 System.out.println("加1年:" + LocalDate.now().plusYears(1)); //(5)減一天 System.out.println("減1天:" + LocalDate.now().minusDays(1)); //(6)減一周 System.out.println("減1周:" + LocalDate.now().minusWeeks(1)); //(7)減一月 System.out.println("減1月:" + LocalDate.now().minusMonths(1)); //(8)減一年 System.out.println("減1年:" + LocalDate.now().minusYears(1)); //C.替換 //(1)替換年份:2000-07-07 System.out.println("替換年份為2000:" + LocalDate.now().withYear(2000)); //(2)替換月份:2020-01-07 System.out.println("替換月份為1:" + LocalDate.now().withMonth(1)); //(3)替換日子:2020-07-01 System.out.println("替換日期為1:" + LocalDate.now().withDayOfMonth(1)); //(4)替換天數:一年中的第多少天 System.out.println("替換天數為1:" + LocalDate.now().withDayOfYear(1)); //D.比較 //(1)是否在當天之前 System.out.println("是否在當天之前:" + LocalDate.now().minusDays(1).isBefore(LocalDate.now())); //(2)是否在當天之後 System.out.println("是否在當天之後:" + LocalDate.now().plusDays(1).isAfter(LocalDate.now())); //(3)是否在當天 System.out.println("是否在當天:" + LocalDate.now().isEqual(LocalDate.now())); //(4)是否是閏年 System.out.println("今年是否是閏年:" + LocalDate.now().isLeapYear());
1.2、LocalDate 與 String 之間的轉換
//(1)從文本字元串獲取LocalDate實例 LocalDate localdate = LocalDate.parse("2022-04-21"); System.out.println(localdate); //(2)使用特定格式化形式從文本字元串獲取LocalDate實例 String str = "2019-03-03"; DateTimeFormatter fmt1 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate date = LocalDate.parse(str, fmt1); System.out.println(date); //(3)使用特定格式化形式將LocalDate轉為字元串 LocalDate today = LocalDate.now(); DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy/MM/dd"); String dateStr = today.format(fmt); System.out.println(dateStr);
1.3、LocalDate 與 Date之間的轉換
//(1)LocalDate轉化為Date ZonedDateTime zonedDateTime = LocalDate.now().atStartOfDay(ZoneId.systemDefault()); Date date = Date.from(zonedDateTime.toInstant()); System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date)); //(2)Date轉化為LocalDate LocalDate localDate = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); System.out.println(localDate.format(DateTimeFormatter.ISO_LOCAL_DATE));
二、LocalTime:時分秒
方法 | 描述 |
---|---|
static LocalTime now() | 獲取預設時區的當前時間 |
static LocalTime now(ZoneId zone) | 獲取指定時區的當前時間 |
static LocalTime now(Clock clock) | 從指定時鐘獲取當前時間 |
of | 根據指定的時、分、秒獲取LocalTime 實例 |
getHour | 獲取小時欄位 |
getMinute | 獲取分鐘欄位 |
getSecond | 獲取秒欄位 |
getNano | 獲取納秒欄位 |
plusHours | 增加小時數 |
plusMinutes | 增加分鐘數 |
plusSeconds | 增加秒數 |
plusNanos | 增迦納秒數 |
minusHours | 減少小時數 |
minusMinutes | 減少分鐘數 |
minusSeconds | 減少秒數 |
minusNanos | 減少納秒數 |
compareTo | 時間與另一個時間比較 |
isAfter | 檢查時間是否在指定時間之後 |
isBefore | 檢查時間是否在指定時間之前 |
2.1、LocalTime常用API
//A.獲取 //(1)獲取預設時區的當前時間 14:11:31.294 System.out.println(LocalTime.now()); //(2)獲取指定時區的當前時間 14:11:31.392 System.out.println(LocalTime.now(ZoneId.of("Asia/Shanghai"))); //(3)從指定時鐘獲取當前時間 14:11:31.392 System.out.println(LocalTime.now(Clock.systemDefaultZone())); //(4)指定獲取時分秒 System.out.println(LocalTime.of(12, 30, 30)); //(5)指定獲取時分 System.out.println(LocalTime.of(12, 30)); //(6)指定獲取時分秒納秒 System.out.println(LocalTime.of(12, 30, 30, 123)); //(7)獲取小時欄位 System.out.println("時: " + LocalTime.now().getHour()); //(8)獲取分鐘欄位 System.out.println("分: " + LocalTime.now().getMinute()); //(9)獲取秒欄位 System.out.println("秒: " + LocalTime.now().getSecond()); //(10)獲取納秒欄位 System.out.println("納秒: " + LocalTime.now().getNano()); //B.計算 //(1)增加一小時 System.out.println("增加1小時: " + LocalTime.now().plusHours(1)); //(2)增加三十分鐘 System.out.println("增加30分鐘: " + LocalTime.now().plusMinutes(30)); //(3)增加三十秒 System.out.println("增加30秒: " + LocalTime.now().plusSeconds(30)); //(4)增加一萬納秒 System.out.println("增加10000納秒:" + LocalTime.now().plusNanos(10000)); //(5)減少一小時 System.out.println("減少1小時: " + LocalTime.now().minusHours(1)); //(6)減少三十分鐘 System.out.println("減少30分鐘: " + LocalTime.now().minusMinutes(30)); //(7)減少三十秒 System.out.println("減少30秒: " + LocalTime.now().minusSeconds(30)); //(8)減少一萬納秒 System.out.println("減少10000納秒:" + LocalTime.now().minusNanos(10000)); //C.比較 //(1)時間與另一個時間比較 0(相等)正數(大)負數(小) System.out.println(LocalTime.now().compareTo(LocalTime.now())); //(2)檢查時間是否在指定時間之後 System.out.println(LocalTime.now().isAfter(LocalTime.now())); //(3)檢查時間是否在指定時間之前 System.out.println(LocalTime.now().isBefore(LocalTime.now()));
2.2、LocalTime與 String 之間的轉換
//(1)從文本字元串獲取LocalTime實例 LocalTime localTime1 = LocalTime.parse("12:30:30"); System.out.println(localTime1); //(2)使用特定格式化形式從文本字元串獲取LocalTime實例 LocalTime localTime2 = LocalTime.parse("12:30:30", DateTimeFormatter.ofPattern("HH:mm:ss")); System.out.println(localTime2); //(3)使用特定格式化形式將LocalTime轉為字元串 DateTimeFormatter df1 = DateTimeFormatter.ofPattern("HH:mm:ss"); LocalTime localTime3 = LocalTime.now(); System.out.println(localTime3.format(df1));
三、LocalDateTime:年月日時分秒
方法 | 描述 |
---|---|
static LocalDateTime now() | 獲取預設時區的當前日期時間 |
static LocalDateTime now(Clock clock) | 從指定時鐘獲取當前日期時間 |
static LocalDateTime now(ZoneId zone) | 獲取指定時區的當前日期時間 |
static LocalDateTime of(LocalDate date, LocalTime time) | 根據日期和時間對象獲取LocalDateTime 實例 |
static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second) | 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 | 減少納秒 |
isEqual | 判斷日期時間是否相等 |
isBefore | 檢查是否在指定日期時間之前 |
isAfter | 檢查是否在指定日期時間之後 |
3.1、LocalDateTime常用API
//A.獲取 //(1)獲取預設時區的當前日期時間 System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); //(2)獲取指定時區的當前日期時間 System.out.println(LocalDateTime.now(ZoneId.of("Asia/Shanghai"))); //(3)從指定時鐘獲取當前日期時間 System.out.println(LocalDateTime.now(Clock.systemDefaultZone())); //(4)根據日期和時間對象獲取LocalDateTime實例 System.out.println(LocalDateTime.of(LocalDate.now(), LocalTime.now())); //(5)根據指定的年、月、日、時、分、秒獲取LocalDateTime實例 System.out.println(LocalDateTime.of(2019, 12, 7, 21, 48, 50)); //(6)獲取年份 System.out.println("年 : " + LocalDateTime.now().getYear()); //(7)使用月份枚舉類獲取月份 System.out.println("月(英文) : " + LocalDateTime.now().getMonth()); //(8) 使用月份數字類獲取月份 System.out.println(" 月(數字英文): " + LocalDateTime.now().getMonth().getValue()); //(9)獲取日期在該月是第幾天 System.out.println("天 : " + LocalDateTime.now().getDayOfMonth()); //(10)獲取日期是星期幾(英文) System.out.println("星期幾(英文) : " + LocalDateTime.now().getDayOfWeek()); //(11)獲取日期是星期幾(數字英文) System.out.println("星期幾(數字英文) : " + LocalDateTime.now().getDayOfWeek().getValue()); //(12)獲取日期在該年是第幾天 System.out.println("本年的第幾天 : " + LocalDateTime.now().getDayOfYear()); //(13)獲取小時 System.out.println("時: " + LocalDateTime.now().getHour()); //(14)獲取分鐘 System.out.println("分: " + LocalDateTime.now().getMinute()); //(15)獲取秒 System.out.println("秒: " + LocalDateTime.now().getSecond()); //(16)獲取納秒 System.out.println("納秒: " + LocalDateTime.now().getNano()); //B.計算 //(1)增加天數 System.out.println("增加天數 : " + LocalDateTime.now().plusDays(1)); //(2)增加周數 System.out.println("增加周數 : " + LocalDateTime.now().plusWeeks(1)); //(3)增加月數 System.out.println("增加月數 : " + LocalDateTime.now().plusMonths(1)); //(4)增加年數 System.out.println("增加年數 : " + LocalDateTime.now().plusYears(1)); //(5)減少天數 System.out.println("減少天數 : " + LocalDateTime.now().minusDays(1)); //(6)減少月數 System.out.println("減少月數 : " + LocalDateTime.now().minusMonths(1)); //(7)減少周數 System.out.println("減少周數 : " + LocalDateTime.now().minusWeeks(1)); //(8)減少年數 System.out.println("減少年數 : " + LocalDateTime.now().minusYears(1)); //(9)增加小時 System.out.println("增加1小時: " + LocalDateTime.now().plusHours(1)); //(10)增加分鐘 System.out.println("增加30分鐘: " + LocalDateTime.now().plusMinutes(30)); //(11)增加秒數 System.out.println("增加30秒: " + LocalDateTime.now().plusSeconds(30)); //(12)增迦納秒 System.out.println("增加10000納秒:" + LocalDateTime.now().plusNanos(10000)); //(13)減少小時 System.out.println("減少1小時:" + LocalDateTime.now().minusHours(1)); //(14)減少分鐘 System.out.println("減少30分鐘:" + LocalDateTime.now().minusMinutes(30)); //(15)減少秒數 System.out.println("減少30秒: " + LocalDateTime.now().minusSeconds(30)); //(16)減少納秒 System.out.println("減少10000納秒:" + LocalDateTime.now().minusNanos(10000)); //C.比較 //(1)判斷日期時間是否相等 System.out.println(LocalDateTime.now().isEqual(LocalDateTime.now())); //(2)檢查是否在指定日期時間之前 System.out.println(LocalDateTime.now().isBefore(LocalDateTime.now())); //(3)檢查是否在指定日期時間之後 System.out.println(LocalDateTime.now().isAfter(LocalDateTime.now()));
3.2、LocalDateTime與 String 之間的轉換
//(1)獲取日期部分 System.out.println(LocalDateTime.now().toLocalDate()); //(2)獲取時間部分:時、分、秒 System.out.println(LocalDateTime.now().toLocalTime().format(DateTimeFormatter.ofPattern("HH:mm:ss"))); //(3)從文本字元串獲取LocalDateTime實例 LocalDateTime ldt2 = LocalDateTime.parse("2019-12-07T21:20:06.303995200"); System.out.println(ldt2.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); //(4)使用特定格式化形式從文本字元串獲取LocalDateTime實例 DateTimeFormatter df1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime ldt3 = LocalDateTime.parse("2019-12-07 21:20:06", df1); System.out.println(ldt3); //(5)使用特定格式化形式將LocalDateTime轉為字元串 String ldt4 = df1.format(ldt3); System.out.println(ldt4);
3.3、LocalDateTime與 Date之間的轉換
//(1)LocalDateTime轉化為Date ZonedDateTime zdt = LocalDateTime.now().atZone(ZoneId.systemDefault()); Date date1 = Date.from(zdt.toInstant()); System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date1)); //(2)Date轉化為LocalDateTime LocalDateTime localDateTime = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); System.out.println(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));