在Java8之前的版本中,我们处理时间类型常常使用的是java.util包下的Date类。
但使用Date类却有诸多的弊端,如:java.util.Date是非线程安全的,所有的日期类都是可变的;日期/时间类的定义并不一致,在java.util和java.sql的包下都含有Date类,在开发过程中极易出错; 日期类并不提供国际化,没有时区支持
为了解决以上问题,Java8在java.time包下提供了很多新的API,常用的类包括LocalDate、LocalTime、LocalDateTime,用以处理日期,时间,日期/时间等
LocalDate类
LocalDate是一个不可变类,在不考虑时区的情况下可以对日期(不包括时间)进行各种操作,它的默认格式是yyyy-MM-dd
获取当前日期以及年、月、日
代码示例:
//获取当前日期以及年、月、日
LocalDatelocalDate=LocalDate.now();
intyear=localDate.getYear();
intmonth=localDate.getMonthValue();
intday=localDate.getDayOfMonth();
System.out.println("当前日期:"+localDate);
System.out.println("年:"+year+"月:"+month+"日:"+day);
运行结果:
当前日期:2018-12-12
年:2018月:12日:12
获取指定的日期
代码示例:
//获取指定的日期
LocalDatespecifiedDay=LocalDate.of(2008,8,18);
System.out.println("指定日期:"+specifiedDay);
运行结果:
指定日期:2008-08-18
比较两个时间的先后顺序以及是否相等
代码示例:
LocalDatelocalDate=LocalDate.now();
LocalDateotherDate=LocalDate.of(2018,11,11);
//equals方法用于比较两个日期是否相等
if(localDate.equals(otherDate)){
System.out.println("localDate与otherDate相等!");
}else{
//isAfter和isBefore方法用于比较两个日期前后顺序
if(localDate.isAfter(otherDate)){
System.out.println("localDate晚于otherDate!");
}
if(localDate.isBefore(otherDate)){
System.out.println("localDate早于otherDate!");
}
}
运行结果:
localDate晚于otherDate!
对日期做加减运算
代码示例:
LocalDatelocalDate=LocalDate.now();
System.out.println("2年后日期:"+localDate.plusYears(2));
System.out.println("6月后日期:"+localDate.plusMonths(6));
System.out.println("3周后日期:"+localDate.plusWeeks(3));
System.out.println("15天后日期:"+localDate.plusDays(15));
System.out.println("2年前日期:"+localDate.minusYears(2));
System.out.println("6月前日期:"+localDate.minusMonths(6));
System.out.println("3周前日期:"+localDate.minusWeeks(3));
System.out.println("15天前日期:"+localDate.minusDays(15));
运行结果:
2年后日期:2020-12-12
6月后日期:2019-06-12
3周后日期:2019-01-02
15天后日期:2018-12-27
2年前日期:2016-12-12
6月前日期:2018-06-12
3周前日期:2018-11-21
15天前日期:2018-11-27
获取日期间隔的天数
代码示例:
//获取某年份的第N天的日期
LocalDatespecialDay=LocalDate.ofYearDay(2018,100);
System.out.println("2018年的第100天:"+specialDay);
//获取两个日期的间隔天数
longintervalDay=localDate.toEpochDay()-specialDay.toEpochDay();
System.out.println("间隔天数:"+intervalDay);
运行结果:
2018年的第100天:2018-04-10
间隔天数:246
LocalTime类
LocalTime与LocalDate一样,也是一个不可变的类,默认格式是hh:mm:ss.zzz,它提供了对时间的各种操作
获取当前时间以及自定义时间
代码示例:
//获取当前时间、时、分、秒以及自定义时间
LocalTimelocalTime=LocalTime.now();
inthour=localTime.getHour();
intminute=localTime.getMinute();
intsecond=localTime.getSecond();
System.out.println("当前时间:"+localTime);
System.out.println("时:"+hour+"分:"+minute+"秒:"+second);
//获取自定义时间
LocalTimespecifiedTime=LocalTime.of(15,30,45);
System.out.println("自定义时间:"+specifiedTime);
运行结果:
当前时间:13:45:59.039
时:13分:45秒:59
自定义时间:15:30:45
比较两个时间的先后顺序
代码示例:
//equals方法比较两个时间是否相等
if(localTime.equals(specifiedTime)){
System.out.println("localTime与specifiedTime相等!");
}else{
//isAfter、isBefore方法比较两个时间的先后顺序
if(localTime.isAfter(specifiedTime)){
System.out.println("localTime晚于specifiedTime!");
}
if(localTime.isBefore(specifiedTime)){
System.out.println("localTime早于specifiedTime!");
}
}
运行结果:
localTime早于specifiedTime!
对时间做加减运算
代码示例:
LocalTimelocalTime=LocalTime.now();
System.out.println("当前时间:"+localTime);
System.out.println("2小时后时间:"+localTime.plusHours(2));
System.out.println("30分钟后时间:"+localTime.plusMinutes(30));
System.out.println("500秒后日时间:"+localTime.plusSeconds(500));
System.out.println("2小时前时间:"+localTime.minusHours(2));
System.out.println("30分钟前时间:"+localTime.minusMinutes(30));
System.out.println("500秒前时间:"+localTime.minusSeconds(500));
运行结果:
当前时间:14:10:15.666
2小时后时间:16:10:15.666
30分钟后时间:14:40:15.666
500秒后时间:14:18:35.666
2小时前时间:12:10:15.666
30分钟前时间:13:40:15.666
500秒前时间:14:01:55.666
LocalDateTime类
LocalDateTime是一个不可变的日期-时间对象,它既包含了日期同时又含有时间,默认格式是yyyy-MM-ddTHH-mm-ss.zzz
获取当前日期时间以及自定义日期时间
示例代码:
//获取当前的日期时间
LocalDateTimelocalDateTime=LocalDateTime.now();
System.out.println("当前的日期时间:"+localDateTime);
//获取自定义的的日期时间
LocalDateTimespecifiedDateTime=LocalDateTime.of(LocalDate.now(),LocalTime.now());
System.out.println("自定义的日期时间:"+specifiedDateTime);
运行结果:
当前的日期时间:2018-12-12T14:31:00.163
自定义的日期时间:2018-12-12T14:31:00.164
转化为日期和时间
代码示例:
//转化为LocalDate和LocalTime
LocalDatelocalDate=localDateTime.toLocalDate();
LocalTimelocalTime=localDateTime.toLocalTime();
System.out.println("当前日期:"+localDate);
System.out.println("当前时间:"+localTime);
运行结果:
当前日期:2018-12-12
当前时间:14:31:00.163
网友评论