简介:

LocalDate——不包含具体时间的日期,比如2014-01-14。它可以用来存储生日,周年纪念日,入职日期等。
java8中有个叫LocalDate的类,能用来表示今天的日期。这个类与java.util.Date略有不同,因为它只包含日期,没有时间。

上代码:

// 取当前日期:
LocalDate now = LocalDate.now();
System.out.println("现在的时间为:"+now);

现在的时间为:2019-11-15

// 根据年月日取日期
LocalDate of = LocalDate.of(2019, 2, 8);
System.out.println("根据年月日取日期: "+of);

根据年月日取日期为: 2019-02-08

// 根据字符串取:
LocalDate endOfFeb = LocalDate.parse("2019-05-06");
System.out.println("根据字符串取为:"+endOfFeb);

根据字符串取为:2019-05-06。
严格按照ISO yyyy-MM-dd验证,05写成5都不行,当然也有一个重载方法允许自己定义格式。
05写成5会报这类错误:
java.time.format.DateTimeParseException: Text ‘2019-5-6’ could not be parsed at index 5

// 取本月第1天:
LocalDate firstDayOfThisMonth = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
System.out.println("取本月第1天为:"+firstDayOfThisMonth);

取本月第1天为:2019-11-01

// 取本月第10天:
LocalDate secondDayOfThisMonth = LocalDate.now().withDayOfMonth(10);
System.out.println("取本月第10天为:"+secondDayOfThisMonth);

取本月第10天为:2019-11-10

// 取本月最后一天:
LocalDate lastDayOfThisMonth =  LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
System.out.println("取本月最后一天为:"+lastDayOfThisMonth);

取本月最后一天为:2019-11-30

// 取明天的日期:
LocalDate firstDayOfNextMonth = LocalDate.now().plusDays(1);
System.out.println("取明天的日期为:"+firstDayOfNextMonth);

取明天的日期为:2019-11-16

// 取昨天的日期:
LocalDate yesterdayDate = LocalDate.now().minusDays(1);
System.out.println("取昨天的日期为:"+yesterdayDate);

取昨天的日期为:2019-11-14

// 取一个星期前的日期:
LocalDate minusWeeksDate = LocalDate.now().minusWeeks(1);
System.out.println("取一个星期前的日期为:"+minusWeeksDate);

取一个星期前的日期为:2019-11-08

// 取2019年1月第一个周一:
LocalDate firstMondayOf2019 = LocalDate.parse("2019-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
System.out.println("取2019年1月第一个周一为:"+firstMondayOf2019);

取2019年1月第一个周一为:2019-01-07

// 检查重复事件,比如生日:
LocalDate myBirthday = LocalDate.of(1997, 10, 10);
System.out.println("生日日期为:"+myBirthday);
LocalDate today = LocalDate.now();
System.out.println("今天的日期为:"+today);
MonthDay birthday = MonthDay.of(myBirthday.getMonth(), myBirthday.getDayOfMonth());
MonthDay monthDay = MonthDay.of(today.getMonth(), today.getDayOfMonth());
if(birthday.equals(monthDay)){
    System.out.println("今天是你的生日");
}
System.out.println("你的生日还没到");

生日日期为:1997-10-10
今天的日期为:2019-11-18
你的生日还没到
如何在java中判断是否是某个节日或者重复事件,使用MonthDay类。这个类由月日组合,不包含年信息,可以用来代表每年重复出现的一些日期或其他组合。他和新的日期库中的其他类一样也都是不可变且线程安全的,并且它还是一个值类(value class)。
通过列子可以看到MonthDay只存储了月日,对比两个日期的月日即可知道是否重复

持续更新