LocalDate 类 是 Java8中新增的日期类,采用了系统的默认时区。
可以方便的处理 日期对象 的 年、月、日 信息。
* 1.创建日期对象
* 1.1 获取当前日期对象
* LocalDate.now() : 返回默认时区下的、系统始终下的 当前日期
* LocalDate.now(Clock clock) : 返回指定时钟的 当前日期
* LocalDate.now(ZoneId zone) : 返回指定时区的 当前日期
* 【补充:获取所有时区信息的方式 : ZoneId.getAvailableZoneIds()】
* 1.2 获取指定日期对象
* LocalDate.of(int year, Month month, int dayOfMonth) : 指定年、月份名称、日期
* LocalDate.of(int year, int month, int dayOfMonth) : 指定 年、月份数字、日期
* LocalDate.ofYearDay(int year, int dayOfYear) : 指定 年分、这一年的第几天
* LocalDate.ofEpochDay(long epochDay) : 指定 距离 1970-01-01 00:00:00 的天数
*
代码
package com.northcastle.K_Date;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
public class LocalDateTest {
public static void main(String[] args) {
//1.1 获取当前日期
LocalDate now01 = LocalDate.now();
System.out.println("now01 = " + now01);
LocalDate now02 = LocalDate.now(Clock.systemUTC());// UTC/GMT 标准时区时间,零时区/中时区
System.out.println("now02 = " + now02);
LocalDate now03 = LocalDate.now(ZoneId.of("Asia/Shanghai"));
System.out.println("now03 = " + now03);
System.out.println("============================");
//1.2 获取指定日期
LocalDate localDate01 = LocalDate.of(2022, Month.MARCH, 20);
System.out.println("localDate01 = " + localDate01);
LocalDate localDate02 = LocalDate.of(2022, 3, 20);
System.out.println("localDate02 = " + localDate02);
LocalDate localDate03 = LocalDate.ofYearDay(2022, 6); // 2022-01-06
System.out.println("localDate03 = " + localDate03);
LocalDate localDate04 = LocalDate.ofEpochDay(3);// 距离 1970-01-01 00:00:00 三天的日期,还是 1970-01-04
System.out.println("localDate04 = " + localDate04);
System.out.println("============================");
}
}
执行结果
* 2.获取日期对象的 年、月、日 信息
* getYear() : 获取年分信息
* getMonth() : 获取月份信息(枚举类型)
* getMonthValue() : 获取月份的数字(数值类型)
* getDayOfMonth() : 获取日期信息
* getDayOfWeek() : 获取星期几 (枚举类型)
* getDayOfYear() : 获取这一年的第几天
*
代码
package com.northcastle.K_Date;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
public class LocalDateTest {
public static void main(String[] args) {
//2.获取日期对象的年月日
LocalDate today = LocalDate.now();
System.out.println("年分 : " + today.getYear());
System.out.println("月份 : " + today.getMonth() + " ; 月份 : "+today.getMonth().getValue()+" ; 月份 : " + today.getMonthValue());
System.out.println("日期 : " + today.getDayOfMonth());
System.out.println("星期 : " + today.getDayOfWeek()+" ; 星期 : "+today.getDayOfWeek().getValue());
System.out.println("今年的第几天 : " + today.getDayOfYear());
System.out.println("============================");
// 获取时区的方法 : Asia/Shanghai
// Set asia = ZoneId.getAvailableZoneIds()
// .stream()
// .filter(s -> s.startsWith("Asia"))
// .collect(Collectors.toSet());
// System.out.println(asia);
}
}
执行结果
* 3.指定 日期对象的属性
* withYear(int) : 设置年
* withMonth(int) : 设置月
* withDayOfMonth(int) : 设置日
* withDayOfYear(int) : 设置这一年的第几天
*
* with(TemporalAdjuster) : 时间调整器,更方便的调整
*
代码
package com.northcastle.K_Date;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
public class LocalDateTest {
public static void main(String[] args) {
// 3.指定日期 年、月、日 属性
LocalDate nowWith = LocalDate.now();
System.out.println("now = " + nowWith);
System.out.println("指定年分2025年 = " + nowWith.withYear(2025));
System.out.println("指定月份6月 = " + nowWith.withMonth(6));
System.out.println("指定日期15号 = " + nowWith.withDayOfMonth(15));
System.out.println("指定日期这一年的第2天 = " + nowWith.withDayOfYear(2));
System.out.println();
// 时间矫正器 : 调整到下个月的1号
// 1.手动调整
TemporalAdjuster temporalAdjuster01 = (temporal)->{
System.out.println("temporal = "+temporal);
LocalDate localDate = (LocalDate) temporal;
localDate = localDate.withMonth(localDate.getMonthValue()+1)
.withDayOfMonth(1); // 注意对象是线程安全的,所以必须要重新接收一边
System.out.println("localDate = " + localDate);
return localDate;
};
LocalDate withTemporalAdjuster01 = nowWith.with(temporalAdjuster01);
System.out.println("withTemporalAdjuster01 = " + withTemporalAdjuster01);
//2.使用已经封装好的
LocalDate withTemporalAdjuster02 = nowWith.with(TemporalAdjusters.firstDayOfNextMonth()); // 现成的方法
System.out.println("withTemporalAdjuster02 = " + withTemporalAdjuster02);
LocalDate withTemporalAdjuster03 = nowWith.with(TemporalAdjusters.dayOfWeekInMonth(1,DayOfWeek.MONDAY)); // 调整到这个月的第一个星期一
System.out.println("withTemporalAdjuster03 = " + withTemporalAdjuster03);
System.out.println("============================");
}
}
执行结果
* 4.加上 或者 减去 年、月、日、周
* plusYears(long) : 加几年
* plusMonths(long) : 加几个月
* plusDays(long) : 加几天
* plusWeeks(long) : 加几个星期
*
* minusYears(long) : 减几年
* minusMonths(long) : 减几个月
* minusDays(long) : 减几天
* minusWeeks(long) : 减几个星期
*
代码
package com.northcastle.K_Date;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
public class LocalDateTest {
public static void main(String[] args) {
// 4. 加上 或者 减去 指定数量 年份、月份、天数、周数
LocalDate nowPlusOrMin = LocalDate.now();
System.out.println("nowPlusOrMin = " + nowPlusOrMin);
System.out.println("加两年 = " + nowPlusOrMin.plusYears(2));
System.out.println("加13个月 = " + nowPlusOrMin.plusMonths(13));
System.out.println("加12天 = " + nowPlusOrMin.plusDays(12));
System.out.println("加一周 = " + nowPlusOrMin.plusWeeks(1));
System.out.println();
System.out.println("减两年 = " + nowPlusOrMin.minusYears(2));
System.out.println("减四个月 = " + nowPlusOrMin.minusMonths(4));
System.out.println("减22天 = " + nowPlusOrMin.minusDays(22));
System.out.println("减1个星期 = " + nowPlusOrMin.minusWeeks(1));
System.out.println("============================");
}
}
执行结果
* 5.日期对象的比较
* date01.isEqual(date02) : 两个日期是否相等
* date01.isAfter(date02) : date01 是否 比 date02 晚
* date01.isBefore(date02) : date01 是否 比 date02 早
*
代码
package com.northcastle.K_Date;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
public class LocalDateTest {
public static void main(String[] args) {
// 5.日期对象比较大小
LocalDate date01 = LocalDate.now();
LocalDate date02 = LocalDate.of(2022, 3, 21);
System.out.println("date01 = " + date01);
System.out.println("date02 = " + date02);
System.out.println("两天是否一致 : " + date01.isEqual(date02));
System.out.println("date01是否比date02晚 : " + date01.isAfter(date02));
System.out.println("date01是否比date02早 : " + date01.isBefore(date02));
System.out.println("============================");
}
}
执行结果
* 6.日期对象与字符串的转化
* 6.1 日期对象转字符串 format() + DateTimeFormatter类
* String format01 = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE); // 最常用 2022-03-22
* String format02 = localDate.format(DateTimeFormatter.ISO_DATE); // 2022-03-23
* String format03 = localDate.format(DateTimeFormatter.BASIC_ISO_DATE); // 20220323
* String format04 = localDate.format(DateTimeFormatter.ISO_ORDINAL_DATE); // 2022-082 年分-当前日期是这一年的第几天
* String format05 = localDate.format(DateTimeFormatter.ISO_WEEK_DATE); // 2022-W12-3 年分-第几周-星期几
* String format06 = localDate.format(DateTimeFormatter.ofPattern("yyyy--$--MM--$--dd")); // 自定义格式化
*
*
* 6.2 字符串转日期对象 parse()
* LocalDate dateParse01 = LocalDate.parse("2022--$--03--$--23",DateTimeFormatter.ofPattern("yyyy--$--MM--$--dd"));
*
代码
package com.northcastle.K_Date;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
public class LocalDateTest {
public static void main(String[] args) {
// 6.1 日期对象 格式化 为字符串
LocalDate dateFormat01 = LocalDate.now();
System.out.println("dateFormat01 = " + dateFormat01);
String format01 = dateFormat01.format(DateTimeFormatter.ISO_LOCAL_DATE); // 最常用 2022-03-22
System.out.println("format01(ISO_LOCAL_DATE) = " + format01);
String format02 = dateFormat01.format(DateTimeFormatter.ISO_DATE); // 2022-03-23
System.out.println("format02(ISO_DATE) = " + format02);
String format03 = dateFormat01.format(DateTimeFormatter.BASIC_ISO_DATE); // 20220323
System.out.println("format03(BASIC_ISO_DATE) = " + format03);
String format04 = dateFormat01.format(DateTimeFormatter.ISO_ORDINAL_DATE); // 2022-082 年分-当前日期是这一年的第几天
System.out.println("format04(ISO_ORDINAL_DATE) = " + format04);
String format05 = dateFormat01.format(DateTimeFormatter.ISO_WEEK_DATE); // 2022-W12-3 年分-第几周-星期几
System.out.println("format05(ISO_WEEK_DATE) = " + format05);
String format06 = dateFormat01.format(DateTimeFormatter.ofPattern("yyyy--$--MM--$--dd")); // 自定义格式化
System.out.println("format06(ofPattern) = " + format06);
System.out.println();
//6.2 字符串 转 时间对象
LocalDate dateParse01 = LocalDate.parse("2022--$--03--$--23",DateTimeFormatter.ofPattern("yyyy--$--MM--$--dd"));
System.out.println("dateParse01 = " + dateParse01);
System.out.println("============================");
}
}
执行结果
* 7.计算两个日期的差 Period
* Period between = Period.between(datePeriod01, datePeriod02); // 小一点的日期,大一点的日期,否则会出现负数
* 7.1 获取相差的【年月日】整体的一个效果
* between.getYears()
* between.getMonths()
* between.getDays()
* 7.2 分别获取相差的【年】【月】【日】的数据
* ChronoUnit.YEARS.between(datePeriod01, datePeriod02));
* ChronoUnit.MONTHS.between(datePeriod01, datePeriod02));
* ChronoUnit.DAYS.between(datePeriod01, datePeriod02));
*
代码
package com.northcastle.K_Date;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
public class LocalDateTest {
public static void main(String[] args) {
//7.计算两个日期对象之间的差
LocalDate datePeriod01 = LocalDate.of(2022,1,27);
System.out.println("datePeriod01 = " + datePeriod01);
LocalDate datePeriod02 = LocalDate.of(2022,3,22);
System.out.println("datePeriod02 = " + datePeriod02);
Period between = Period.between(datePeriod01, datePeriod02); // 小一点的日期,大一点的日期
System.out.println("between.getYears() = " + between.getYears());
System.out.println("between.getMonths() = " + between.getMonths());
System.out.println("between.getDays() = " + between.getDays());
System.out.println("相差年数 = " + ChronoUnit.YEARS.between(datePeriod01, datePeriod02)); // 获取每个维度的数据
System.out.println("相差月数 = " + ChronoUnit.MONTHS.between(datePeriod01, datePeriod02));
System.out.println("相差天数 = " + ChronoUnit.DAYS.between(datePeriod01, datePeriod02));
System.out.println("============================");
}
}
执行结果
* 其他方法
* isLeapYear() : 判断是否是闰年
* atStartOfDay() : 自动赋值 时分秒 为0
* lengthOfMonth() : 返回当前月份的长度
* lengthOfYear() : 返回今年有多少天
*
其他的这些简单API 各位Coder 可以自行 测试,不在此赘述了,
Congratulations!
You are one step closer to success!