在JAVA中,常用的处理日期和时间的类主要有Date,Calendar,而在JDK1.8中,新增了两个处理日期和时间的类,一个是LocalDate,另一个是LocalTime,下面我来介绍一下这两个类中常用方法的用法。
1、LocalDate
LocalDate主要是用来处理日期的类,主要有以下方法:
方法 说明 举例
LocalDate.now() 获取当前日期
LocalDate localDate = LocalDate.now();
System.out.println(localDate);
运行结果为:2019-01-07
LocalDate.of(int year, int month, int dayOfMonth)
根据参数设置日期,参数分别为年,月,日
LocalDate localDate = LocalDate.of(2019,1,7);
System.out.println(localDate);
运行结果为:2019-01-07
localDate.getDayOfMonth()
localDate.getDayOfWeek()
localDate.getDayOfYear()
获取当前日期是所在月的第几天
获取当前日期是星期几(星期的英文全称)
获取当前日期是所在年的第几天
LocalDate localDate = LocalDate.of(2019,1,7);
System.out.println(localDate.getDayOfMonth());
System.out.println(localDate.getDayOfWeek());
System.out.println(localDate.getDayOfYear());
运行结果为:7,MONDAY,7
localDate.getMonth()
localDate.getMonthValue()
localDate.lengthOfMonth()
获取当前日期所在月份(月份的英文全称)
获取当前日期所在月份的数值
获取当前日期所在月份有多少天
LocalDate localDate = LocalDate.of(2019,1,7);
System.out.println(localDate.getMonth());
System.out.println(localDate.getMonthValue());
System.out.println(localDate.lengthOfMonth());
运行结果为:JANUARY,1,31
localDate.lengthOfYear()
localDate.isLeapYear()
获取当前日期所在年有多少天
获取当前日期所在年是否是闰年
LocalDate localDate = LocalDate.of(2019,1,7);
System.out.println(localDate.lengthOfYear());
System.out.println(localDate.isLeapYear());
运行结果为:365,false
localDate.withDayOfMonth(int dayOfMonth)
localDate.withDayOfYear(int dayOfYear)
localDate.withMonth(int month)
localDate.withYear(int year)
with开头的方法,我的理解是将参数替换localDate中的对应
属性,重新计算得到新的日期。
将参数中的"日"替换localDate中的"日"
将参数中的天数替换localDate中的天数
将参数中的"月"替换localDate中的"月"
将参数中的"年"替换localDate中的"年"
LocalDate localDate = LocalDate.of(2019,1,7);
System.out.println(localDate.withDayOfMonth(2));
System.out.println(localDate.withDayOfYear(40));
System.out.println(localDate.withMonth(2));
System.out.println(localDate.withYear(2020));
运行结果为:
2019-01-02,
2019-02-09,
2019-02-07,
2020-01-07
localDate.minusDays(long days)
localDate.minusWeeks(long weeks)
localDate.minusMonths(long months)
localDate.minusYears(long years)
localDate.plusDays(long days)
localDate.plusWeeks(long weeks)
localDate.plusMonths(long months)
localDate.plusYears(long years)
将当前日期减一天
将当前日期减一周
将当前日期减一月
将当前日期减一年
将当前日期加一天
将当前日期加一周
将当前日期加一月
将当前日期加一年
复制代码
LocalDate localDate = LocalDate.of(2019,1,7);
System.out.println(localDate.minusDays(1));
System.out.println(localDate.minusMonths(1));
System.out.println(localDate.minusWeeks(1));
System.out.println(localDate.minusYears(1));
System.out.println(localDate.plusDays(1));
System.out.println(localDate.plusMonths(1));
System.out.println(localDate.plusWeeks(1));
System.out.println(localDate.plusYears(1));
复制代码
运行结果为:
2019-01-06
2018-12-07
2018-12-31
2018-01-07
2019-01-08
2019-02-07
2019-01-14
2020-01-07
2、LocalTime
LocalTime主要是用来处理时间的类,主要有以下方法:
方法 说明 举例
LocalTime.now() 获取当前时间
LocalTime localTime = LocalTime.now();
System.out.println(localTime);
运行结果为:22:53:44.277
LocalTime.of(int hour, int minute)
LocalTime.of(int hour, int minute, int second)
根据参数设置时间,参数分别为时,分
根据参数设置时间,参数分别为时,分,秒
LocalTime localTime = LocalTime.of(12,35,59);
System.out.println(localTime);
localTime = LocalTime.of(12,35);
System.out.println(localTime);
运行结果为:12:35:59,12:35
localTime.getHour()
localTime.getMinute()
localTime.getSecond()
获取当前时间的小时数
获取当前时间的分钟数
获取当前时间的秒数
LocalTime localTime = LocalTime.of(12,35,59);
System.out.println(localTime.getHour());
System.out.println(localTime.getMinute());
System.out.println(localTime.getSecond());
运行结果为:12,35,59
localTime.withHour(int hour)
localTime.withMinute(int minute)
localTime.withSecond(int second)
with开头的方法,我的理解是将参数替换localTime中的对应属性,
重新计算得到新的时间。
将参数中的"小时"替换localTime中的"小时"
将参数中的"分钟"替换localTime中的"分钟"
将参数中的"秒"替换localTime中的"秒"
LocalTime localTime = LocalTime.of(12,35,59);
System.out.println(localTime.withHour(1));
System.out.println(localTime.withMinute(1));
System.out.println(localTime.withSecond(1));
运行结果为:
01:35:59
12:01:59
12:35:01
localTime.minusHours(long hours)
localTime.minusMinutes(long minutes)
localTime.minusSeconds(long seconds)
localTime.plusHours(long hours)
localTime.plusMinutes(long minutes)
localTime.plusSeconds(long seconds)
将当前时间减一小时
将当前时间减一分钟
将当前时间减一秒
将当前时间加一小时
将当前时间加一分钟
将当前时间加一秒
复制代码
LocalTime localTime = LocalTime.of(12,35,59);
System.out.println(localTime.minusHours(1));
System.out.println(localTime.minusMinutes(1));
System.out.println(localTime.minusSeconds(10));
System.out.println(localTime.plusHours(1));
System.out.println(localTime.plusMinutes(1));
System.out.println(localTime.plusSeconds(10));
复制代码
运行结果为:
11:35:59
12:34:59
12:35:49
13:35:59
12:36:59
12:36:09
3、日期 + 时间
从1和2中可以看出,LocalDate的方法主要都是用来处理日期的,而LocalTime的方法主要都是用来处理时间的,但两个类都提供了表示日期 + 时间的方法。
LocalDate提供了atTime方法,用来表示日期 + 时间
LocalDate localDate = LocalDate.of(2019,1,7);
System.out.println(localDate.atTime(LocalTime.now()));
System.out.println(localDate.atTime(10,30));
System.out.println(localDate.atTime(10,30,59));
运行结果为:
2019-01-07T23:21:32.804
2019-01-07T10:30
2019-01-07T10:30:59
LocalTime提供了atDate方法,用来表示日期 + 时间
LocalTime localTime = LocalTime.of(12,35,59);
System.out.println(localTime.atDate(LocalDate.of(2019,1,7)));
运行结果为:2019-01-07T12:35:59
4、格式转换
从3中我们可以看出,表示日期 + 时间后,格式发生了变化,原来atTime和atDate方法的返回值都是LocalDateTime类,这个类把toString()方法重写了,导致输出的格式变化了。
@Override
public String toString() {
return date.toString() + ‘T’ + time.toString();
}
那么想要转换日期或时间的格式该怎么办呢?
LocalDate和LocalTime都提供了格式转换的方法,format和parse
方法 说明 举例
LocalDate.format(DateTimeFormatter formatter)
将LocalDate类型的数据转换为String类型的数据,参数为DateTimeFormatter类,该类提供了ofPattern(String pattern)方法,可传入相应的日期格式:
yyyy,
yyyy-MM,
yyyy-MM-dd,
yyyy-MM-dd HH,
yyyy-MM-dd HH:mm,
yyyy-MM-dd HH:mm:ss
注:若LocalDate未调用atTime方法,则表示LocalDate只表示日期,则此时不能转换带有时间格式的表示式
复制代码
LocalDate localDate = LocalDate.of(2019,1,7);
LocalTime localTime = LocalTime.now();
DateTimeFormatter f = DateTimeFormatter.ofPattern(“yyyy”);
System.out.println(localDate.atTime(localTime).format(f));
DateTimeFormatter f2 = DateTimeFormatter.ofPattern(“yyyy-MM”);
System.out.println(localDate.atTime(localTime).format(f2));
DateTimeFormatter f3 = DateTimeFormatter.ofPattern(“yyyy-MM-dd”);
System.out.println(localDate.atTime(localTime).format(f3));
DateTimeFormatter f4 = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”);
System.out.println(localDate.atTime(localTime).format(f4));
DateTimeFormatter f5 = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm”);
System.out.println(localDate.atTime(localTime).format(f5));
DateTimeFormatter f6 = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH”);
System.out.println(localDate.atTime(localTime).format(f6));
复制代码
运行结果为:
2019
2019-01
2019-01-07
2019-01-07 23:49:08
2019-01-07 23:49
2019-01-07 23
LocalTime.format(DateTimeFormatter formatter)
将LocalTime类型的数据转换为String类型的数据,参数为DateTimeFormatter类,
该类提供了ofPattern(String pattern)方法,可传入相应的日期格式:
yyyy,
yyyy-MM,
yyyy-MM-dd,
yyyy-MM-dd HH,
yyyy-MM-dd HH:mm,
yyyy-MM-dd HH:mm:ss
注:若LocalTime未调用atDate方法,则表示LocalTime只表示时间,则此时不能转换带有日期格式的表示式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”);
System.out.println(LocalTime.now().atDate(LocalDate.now()).format(formatter));
运行结果为:2019-01-07 23:07:06
其他格式这里就不一一列举了
LocalDate.parse(CharSequence text)
将日期字符串转换成LocalDate类型,不能转换带时间格式的字符串
System.out.println(LocalDate.parse(“2019-10-15”));
运行结果为:2019-10-15
LocalTime.parse(CharSequence text)
将时间字符串转换成LocalTime类型,不能转换带日期格式的字符串
System.out.println(LocalTime.parse(“22:35:40”));
运行结果为:22:35:40