一、api介绍
获取当前系统日期
LocalDate now = LocalDate.now();
System.out.println(now);
结果:
2019-01-22
创建一个日期
创建日期为2013-09-10,参数为年、月、日
LocalDate date1 = LocalDate.of(2013, 9, 10);
System.out.println(date1);
结果:
2013-09-10
创建一个日期,1999年的第100天
LocalDate date2 = LocalDate.ofYearDay(1999, 100);
System.out.println(date2);
结果:
1999-04-10
创建一个日期,距离1970-1-1纪元10000天
LocalDate date3 = LocalDate.ofEpochDay(10000);
System.out.println(date3);
结果:
1997-05-19
将日期字符串转为LocalDate
字符串格式严格参照yyyy-MM-dd
LocalDate parse1 = LocalDate.parse("2015-01-01");
//LocalDate parse2 = LocalDate.parse("2015-1-01");//报错
//LocalDate parse3 = LocalDate.parse("2015-01-1");//报错
//LocalDate parse4 = LocalDate.parse("15-01-1");//报错
结果:
2015-01-01
获取当前日期的年份
LocalDate now = LocalDate.now();
int year = now.getYear();
System.out.println(year);
结果:
2019
获取当前日期的月份
LocalDate now = LocalDate.now();
int month = now.getMonthValue();
System.out.println(month);
结果:
1
获取当前日期的月中天数
LocalDate now = LocalDate.now();
int day = now.getDayOfMonth();
System.out.println(day);
结果:
22
获取当前日期的年中天数
LocalDate now = LocalDate.now();
int yearday = now.getDayOfYear();
System.out.println(yearday);
结果:恰巧是首月,和月中天数一天
22
当前日期是星期几
LocalDate now = LocalDate.now();
DayOfWeek dayOfWeek = now.getDayOfWeek();
System.out.println(dayOfWeek);
结果:
TUESDAY
判断这个日期的年份是不是闰年
LocalDate now = LocalDate.now();
boolean leapYear = now.isLeapYear();
System.out.println(leapYear);
结果:
false
这个日期的月份有多少天
LocalDate now = LocalDate.now();
int lengthOfMonth = now.lengthOfMonth();
System.out.println(lengthOfMonth);
结果:
31
这个日期的年份有多少天
LocalDate now = LocalDate.now();
int lengthOfYear = now.lengthOfYear();
System.out.println(lengthOfYear);
结果:
365
在当前日期上修改年份,返回一个新的日期
LocalDate now = LocalDate.now();
LocalDate withYear = now.withYear(1999);
System.out.println(withYear);
结果:
1999-01-22
在当前日期上修改年份,返回一个新的日期
LocalDate now = LocalDate.now();
LocalDate withYear = now.withYear(1999);
System.out.println(withYear);
结果:
1999-01-22
在当前日期上修改月份,返回一个新的日期
LocalDate now = LocalDate.now();
LocalDate withMonth = now.withMonth(12);
System.out.println(withMonth);
结果:
2019-12-22
在当前日期上修改月份中的天数,返回一个新的日期
LocalDate now = LocalDate.now();
LocalDate withDayOfMonth = now.withDayOfMonth(31);
System.out.println(withDayOfMonth);
结果:
2019-01-31
在当前日期上修改年份中的天数,返回一个新的日期
LocalDate now = LocalDate.now();
LocalDate withDayOfYear = now.withDayOfYear(60);
System.out.println(withDayOfYear);
结果:
2019-03-01
日期的加法运算
在此日期基础上加年份
LocalDate now = LocalDate.now();
LocalDate plusYears = now.plusYears(200);
System.out.println(plusYears);
结果:2019年加200年=2219
2219-01-22
在此日期基础上加月份
LocalDate now = LocalDate.now();
LocalDate plusMonths = now.plusMonths(1);
System.out.println(plusMonths);
结果:2019-01-22加一个月
2019-02-22
在此日期上加天数
LocalDate now = LocalDate.now();
LocalDate plusDays = now.plusDays(8);
System.out.println(plusDays);
结果:2019-01-22加8天
2019-01-30
注意:我们在2019-01-30的基础上加一个月呢,结果是什么
LocalDate plusMonths2 = plusDays.plusMonths(1);
System.out.println(plusMonths2);
结果:是二月份的最后一天
2019-02-28
在日期的基础上设置时间
设置小时和分钟
LocalDate now = LocalDate.now();
LocalDateTime atTime = now.atTime(11, 11);
System.out.println(atTime);
结果:
2019-01-22T11:11
此日期的开始时间
LocalDate now = LocalDate.now();
LocalDateTime atStartOfDay = now.atStartOfDay();
System.out.println(atStartOfDay);
结果:
2019-01-22T00:00
距离纪元11970-01-01的天数
LocalDate now = LocalDate.now();
long epochDay = now.toEpochDay();
System.out.println(epochDay);
结果:
17918
二、利用LocalDate实现一个月历
public static void main(String[] args) {
//利用localDate实现一个月历
//获取当前日期
LocalDate now = LocalDate.now();//2019-01-23
//获取日期的年份,用于日历标题
int year = now.getYear();
//获取日期的月份,用于日历标题
int month = now.getMonthValue();
System.out.println(year+"年-"+month+"月的月历");//日历标题
//获取日期的月中日,用于定位月初日
int today = now.getDayOfMonth();
//获取月初日期
LocalDate monthFristDay = now.minusDays(today-1);//2019-01-01
//System.out.println(monthFristDay);
//判断月初日是星期几
DayOfWeek dayOfWeek = monthFristDay.getDayOfWeek();
//输出星期格式
System.out.println("MON TUE WED THU FRI SAT SUN");
//月初与星期格式对上
for(int i = 1;i<dayOfWeek.getValue();i++) {
System.out.print(" ");
}
//循环这个月日期
while(monthFristDay.getMonthValue() == month) {
//在日历上输出日期
System.out.printf("%3d",monthFristDay.getDayOfMonth());
//如果日期是当天就标*号
if(monthFristDay.getDayOfMonth() == today) {
System.out.print("*");
}else {
System.out.print(" ");
}
//如果日期是星期天,换行
if(monthFristDay.getDayOfWeek().getValue() ==7) {
System.out.println();
}
monthFristDay= monthFristDay.plusDays(1);
}
}
结果: