jdk8之前,java中做时间处理时一般会采用java.util.Date,大多吐槽Date的是其对于月份的处理是从0开始的,取得正确月份还得往后偏移一位。Date内容很丰富,不但包含年月日,还包含时间。jdk8之后,我们有更好的选择 -- java.time.LocalDate。
这是jdk8中新增的日期处理类,同时新增的还有java.time.LocalTime、java.time.LocalDateTime等。
相比Date来说,LoalDate更安全、更精确也更明确。LocalDate不包含时间,只是单纯的年月日,要精确到时分秒甚至毫秒的就需要用java.time.LocalDateTime了。
一些常用的方法:
//获取点当前时间对象
LocalDate now = LocalDate.now();//输出 : 2018-09-08
//今年是哪一年
int dayofYear = now.getDayOfYear();
//今天是哪一月
int month = now.getMonth().getValue();
// 今天是几号
int dayofMonth = now.getDayOfMonth();
// 今天是周几
int dayofWeek = now.getDayOfWeek().getValue();
//设置指定日期的时间对象:
LocalDate appoint = LocalDate.parse("2018-12-07");
//计算两个日期相差多少天:
long differ = appoint.toEpochDay()-now.toEpochDay() // differ : 90
//指定天数的加减
LocalDate minus = now.minusDays(10);
System.out.println(minus); //minus : 2018-08-29
LocalDate plus = now.plusDays(10);
System.out.println(plus); //plus : 2018-09-18
//校验两个日期的前后关系
boolean flag = now.isBefore(appoint);
System.out.println(flag); //flag : true
// 获取取本月第1天:
LocalDate firstDayOfThisMonth = now .with(TemporalAdjusters.firstDayOfMonth())
System.out.println("firstDayOfThisMonth = " + firstDayOfThisMonth); //2018-09-01
// 取本月第2天:
LocalDate secondDayOfThisMonth = now .withDayOfMonth(2);
System.out.println("secondDayOfThisMonth = " + secondDayOfThisMonth); //2018-09-02
// 取本月最后一天,再也不用计算是28,29,30还是31:
LocalDate lastDayOfThisMonth = now .with(TemporalAdjusters.lastDayOfMonth());
System.out.println("lastDayOfThisMonth = " + lastDayOfThisMonth); //2018-09-30
// 取下月第一天:
LocalDate firstDayOfNextMonth = lastDayOfThisMonth.plusDays(1);
System.out.println("firstDayOfNextMonth = " + firstDayOfNextMonth); //2018-10-01
// 取下月最后一天:
LocalDate lastDayOfNextOfMonth = firstDayOfNextMonth.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("lastDayOfNextOfMonth = " + lastDayOfNextOfMonth); //2018-10-31
// 取2019年1月第一个周一,用Calendar要死掉很多脑细胞:
LocalDate special = LocalDate.parse("2019-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
System.out.println("special = " + special); //2019-01-07
常用API
getYear() int 获取当前日期的年份
getMonth() Month 获取当前日期的月份对象
getMonthValue() int 获取当前日期是第几月
getDayOfWeek() DayOfWeek 表示该对象表示的日期是星期几
getDayOfMonth() int 表示该对象表示的日期是这个月第几天
getDayOfYear() int 表示该对象表示的日期是今年第几天
withYear(int year) LocalDate 修改当前对象的年份
withMonth(int month) LocalDate 修改当前对象的月份
withDayOfMonth(int dayOfMonth) LocalDate 修改当前对象在当月的日期
isLeapYear() boolean 是否是闰年
lengthOfMonth() int 这个月有多少天
lengthOfYear() int 该对象表示的年份有多少天(365或者366)
plusYears(long yearsToAdd) LocalDate 当前对象增加指定的年份数
plusMonths(long monthsToAdd) LocalDate 当前对象增加指定的月份数
plusWeeks(long weeksToAdd) LocalDate 当前对象增加指定的周数
plusDays(long daysToAdd) LocalDate 当前对象增加指定的天数
minusYears(long yearsToSubtract) LocalDate 当前对象减去指定的年数
minusMonths(long monthsToSubtract) LocalDate 当前对象减去注定的月数
minusWeeks(long weeksToSubtract) LocalDate 当前对象减去指定的周数
minusDays(long daysToSubtract) LocalDate 当前对象减去指定的天数
compareTo(ChronoLocalDate other) int 比较当前对象和other对象在时间上的大小,返回值如果为正,则当前对象时间较晚,
isBefore(ChronoLocalDate other) boolean 比较当前对象日期是否在other对象日期之前
isAfter(ChronoLocalDate other) boolean 比较当前对象日期是否在other对象日期之后
isEqual(ChronoLocalDate other) boolean 比较两个日期对象是否相等
关于LocalDate就说这么多吧,我也是刚刚学的,原创,转载请表明出处,谢谢。