java 已經(jīng)出到 17 了,而小編還在用 8 的版本,在 8 中已經(jīng)推出了新的日期 API,不在使用 。java.time 包下提供了用于日期、時間、實例和周期的主要 API。
獲取今天日期
LocalDate 存儲了日期,如:2022-01-09,它不包含時間。
public static void main(String[] args) {
LocalDate now = LocalDate.now();
System.out.println(now);
}
設(shè)置日期
of 方法是一個靜態(tài)方法,接收年、月、日三個 int 參數(shù),返回 LocalDate 對象。需要注意的是月份不是從 0 開始的。
public static void main(String[] args) {
LocalDate date = LocalDate.of(2022,1,9);
System.out.println(date);
}
日期判斷
日期操作第一個會想到的就是兩個日期是否相等的操作
public static void main(String[] args) {
LocalDate date = LocalDate.of(2022,1,10);
LocalDate today = LocalDate.now();
if(date.equals(today)) {
System.out.println("日期相等");
} else {
System.out.println("日期不相等");
}
}
當(dāng)前日期是否早于、晚于另外的日期,使用 isAfter() 和 isBefore() 方法。
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate date = LocalDate.of(2022,1,9);
if(today.isAfter(date)) {
System.out.println("今天已經(jīng)晚了");
} else {
System.out.println("今天還早");
}
if(today.isBefore(date)) {
System.out.println("今天在前面");
} else {
System.out.println("今天在后面");
}
}
匹配周期性的日期
在某些業(yè)務(wù)中,每年、每月、每周都會有一個特定的日期,比如每個月的賬單日、每年的生日等日期,這時就不能把年、月等放入日期比較??梢允褂?DayOfWeek、MonthDay、YearMonth 類處理這類日期。
public static void main(String[] args) {
LocalDate date = LocalDate.of(2022,1,9);
MonthDay monthDay = MonthDay.of(date.getMonth(), date.getDayOfMonth());
MonthDay today = MonthDay.from(LocalDate.now());
if(today.equals(monthDay)) {
System.out.println("今天已經(jīng)到特定的日期了");
} else {
System.out.println("今天還沒有到特定的日期");
}
}
一周、月、年前、后的日期
ChronoUnit 是用來表示時間的單位,比如:ChronoUnit.YEARS 年,ChronoUnit.WEEKS 周。minus()、plus() 方法用來減去、加上一個時間周期。
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate preWeek = today.minus(1, ChronoUnit.WEEKS);
System.out.println(preWeek);
LocalDate afterWeek = today.plus(1, ChronoUnit.WEEKS);
System.out.println(afterWeek);
LocalDate preMon = today.minus(1, ChronoUnit.MONTHS);
System.out.println(preMon);
LocalDate afterMon = today.plus(1, ChronoUnit.MONTHS);
System.out.println(afterMon);
LocalDate preYear = today.minus(1, ChronoUnit.YEARS);
System.out.println(preYear);
LocalDate afterYear = today.plus(1, ChronoUnit.YEARS);
System.out.println(afterYear);
}
日期間隔
計算兩個日期的間隔了多少天、月是一個很常規(guī)的業(yè)務(wù)操作。月是用 Period 類計算,天使用 LocalDate 的 toEpochDay() 方法計算。
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate date = LocalDate.of(2022,4,10);
Period period = Period.between( date,today);
System.out.println("間隔了" + period.getMonths() + "月");
System.out.println("間隔了" + (today.toEpochDay() - date.toEpochDay()) + "天");
}
時間戳
Instant 類有一個靜態(tài)工廠方法now()會返回當(dāng)前的時間戳。
public static void main(String[] args) {
Instant instant = Instant.now();
System.out.println(instant);
System.out.println(instant.toEpochMilli());
}
格式化日期
DateTimeFormatter 是一個線程安全的日期和時間格式化器,下面是用 DateTimeFormatter.BASIC_ISO_DATE 將 20210109 格式化成了 2021-01-09。
public static void main(String[] args) {
String str = "20210109";
LocalDate formatted = LocalDate.parse(str, DateTimeFormatter.BASIC_ISO_DATE);
System.out.println("格式化后的日期為: "+ formatted);
}
DateTimeFormatter 也可以自定義格式化字符串。
public static void main(String[] args) {
String str = "09012021";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMddyyyy");
LocalDate date = LocalDate.parse(str, formatter);
System.out.print(date);
}
是否為閏年
小編在學(xué)程序之初被閏年折磨的死去活來,給個年份計算是不是閏年。java 8 的 isLeapYear() 就很好的解決了這個問題。
public static void main(String[] args) {
LocalDate today = LocalDate.now();
if(today.isLeapYear()){
System.out.println("閏年");
}else {
System.out.println("不是閏年");
}
}
日期轉(zhuǎn)字符串
上面格式化的例子是將字符串轉(zhuǎn)為日期,下面是將日期轉(zhuǎn)為字符串。
public static void main(String[] args) {
LocalDate now = LocalDate.now();
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String str = now.format(format);
System.out.print(str);
}
-
JAVA
+關(guān)注
關(guān)注
19文章
2952瀏覽量
104479 -
API
+關(guān)注
關(guān)注
2文章
1472瀏覽量
61749 -
格式化
+關(guān)注
關(guān)注
2文章
38瀏覽量
9101
發(fā)布評論請先 登錄
相關(guān)推薦
評論