文章目录
Java日期时间(LocalDate、LocalTime、LocalDateTime)
前言
Java中1.8之前有date类,date类到了1.8大部分的方法被弃而且date类如果不格式化可读性十分差,而simpledateformat方法中format和parse方法都是线程不安全的。Java1.8之后出现了localdate,localdatetime,localtime这些类,而这些类使用了final来修饰,使得这些类是不可变的,一旦实例化,值就固定了,有点类似于String类,所以这些类都是线程安全的。
localdate年月日,localtime时分秒,localdatetime年月日时分秒
1、LocalDate
LocalDate类的实例是一个不可变对象,它只提供了简单的日期,并不含当天的时间信息,这个类是不可变的和线程安全的。
方法 | 描述 |
---|---|
now | 根据当前时间创建LocalDate对象 |
of | 根据指定年月日创建LocalDate对象 |
getYear | 获得年份 |
getMonthValue | 获得月份 |
getMonth | 获得月份枚举值 |
getDayOfMonth | 获得月份天数(1-31) |
getDayOfWeek | 获得星期几 |
getDayOfYear | 获得年份中的第几天(1-366) |
lengthOfYear | 获得当年总天数 |
lengthOfMonth | 获得当月总天数 |
toEpochDay | 与时间纪元(1970年1月1日)相差的天数 |
plusDays | 加天 |
plusWeeks | 加周 |
plusMonths | 加月 |
plusYears | 加年 |
minusDays | 减年 |
minusWeeks | 减周 |
minusMonths | 减月 |
minusYears | 减年 |
withYear | 替换年份 |
withYear | 替换年份 |
withDayOfMonth | 替换日期 |
withDayOfYear | 替换日期 |
isBefore | 是否日期在之前 |
isAfter | 是否日期在之后 |
isEqual | 是否是当前日期 |
isleapYear | 是否是闰年 |
1.1、LocalDate常用API
代码如下(示例):
//A.获取//(1)获取当前日期 2022-04-20System.out.println(LocalDate.now());//(2)获取指定日期 2014-03-18System.out.println(LocalDate.of(2014,3,18));//(3)获取日期的年份 2022System.out.println(LocalDate.now().getYear());//(4)获取日期的月份 4System.out.println(LocalDate.now().getMonthValue());//(5)获取日期的日子 20System.out.println(LocalDate.now().getDayOfMonth());//(6)获取日期的星期 WEDNESDAYSystem.out.println(LocalDate.now().getDayOfWeek());//(7)当天所在这一年的第几天 110System.out.println(LocalDate.now().getDayOfYear());//(8)获取当年天数 365System.out.println(LocalDate.now().lengthOfYear());//(9)获取当月天数 30System.out.println(LocalDate.now().lengthOfMonth());//(10)与时间纪元(1970年1月1日)相差的天数,负数表示在时间纪元之前多少天 19102System.out.println(LocalDate.now().toEpochDay());//B.运算//(1)加一天System.out.println("加1天:"+LocalDate.now().plusDays(1));//(2)加一周System.out.println("加1周:"+LocalDate.now().plusWeeks(1));//(3)加一月System.out.println("加1月:"+LocalDate.now().plusMonths(1));//(4)加一年System.out.println("加1年:"+LocalDate.now().plusYears(1));//(5)减一天System.out.println("减1天:"+LocalDate.now().minusDays(1));//(6)减一周System.out.println("减1周:"+LocalDate.now().minusWeeks(1));//(7)减一月System.out.println("减1月:"+LocalDate.now().minusMonths(1));//(8)减一年System.out.println("减1年:"+LocalDate.now().minusYears(1));//C.替换//(1)替换年份System.out.println("替换年份为1:"+LocalDate.now().withYear(1));//(2)替换月份System.out.println("替换月份为1:"+LocalDate.now().withMonth(1));//(3)替换日子System.out.println("替换日期为1:"+LocalDate.now().withDayOfMonth(1));//(4)替换天数System.out.println("替换天数为1:"+LocalDate.now().withDayOfYear(1));//D.比较//(1)是否在当天之前System.out.println("是否在当天之前:"+LocalDate.now().minusDays(1).isBefore(LocalDate.now()));//(2)是否在当天之后System.out.println("是否在当天之后:"+LocalDate.now().plusDays(1).isAfter(LocalDate.now()));//(3)是否在当天System.out.println("是否在当天:"+LocalDate.now().isEqual(LocalDate.now()));//(4)是否是闰年System.out.println("今年是否是闰年:"+LocalDate.now().isLeapYear());
1.2、LocalDate 与 String 之间的转换
//(1)从文本字符串获取LocalDate实例LocalDate localdate=LocalDate.parse("2022-04-21");System.out.println(localdate);//(2)使用特定格式化形式从文本字符串获取LocalDate实例String str="2019-03-03";DateTimeFormatter fmt1=DateTimeFormatter.ofPattern("yyyy-MM-dd");LocalDate date=LocalDate.parse(str, fmt1);System.out.println(date);//(3)使用特定格式化形式将LocalDate转为字符串LocalDate today=LocalDate.now();DateTimeFormatter fmt=DateTimeFormatter.ofPattern("yyyy/MM/dd");String dateStr= today.format(fmt);System.out.println(dateStr);
1.3、LocalDate 与 Date之间的转换
//(1)LocalDate转化为DateZonedDateTime zonedDateTime=LocalDate.now().atStartOfDay(ZoneId.systemDefault());Date date=Date.from(zonedDateTime.toInstant());System.out.println(newSimpleDateFormat("yyyy-MM-dd").format(date));//(2)Date转化为LocalDateLocalDate localDate=newDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();System.out.println(localDate.format(DateTimeFormatter.ISO_LOCAL_DATE));
2、LocalTime
LocalTime是一个不可变的时间对象,代表一个时间,格为 时 - 分 - 秒,时间表示为纳秒精度,这个类是不可变的和线程安全的。
方法 | 描述 |
---|---|
static LocalTime now() | 获取默认时区的当前时间 |
static LocalTime now(ZoneId zone) | 获取指定时区的当前时间 |
static LocalTime now(Clock clock) | 从指定时钟获取当前时间 |
of | 根据指定的时、分、秒获取LocalTime 实例 |
getHour | 获取小时字段 |
getMinute | 获取分钟字段 |
getSecond | 获取秒字段 |
getNano | 获取纳秒字段 |
plusHours | 增加小时数 |
plusMinutes | 增加分钟数 |
plusSeconds | 增加秒数 |
plusNanos | 增加纳秒数 |
minusHours | 减少小时数 |
minusMinutes | 减少分钟数 |
minusSeconds | 减少秒数 |
minusNanos | 减少纳秒数 |
compareTo | 时间与另一个时间比较 |
isAfter | 检查时间是否在指定时间之后 |
isBefore | 检查时间是否在指定时间之前 |
2.1、LocalTime常用API
代码如下(示例):
//A.获取//(1)获取默认时区的当前时间 14:11:31.294System.out.println(LocalTime.now());//(2)获取指定时区的当前时间 14:11:31.392System.out.println(LocalTime.now(ZoneId.of("Asia/Shanghai")));//(3)从指定时钟获取当前时间 14:11:31.392System.out.println(LocalTime.now(Clock.systemDefaultZone()));//(4)指定获取时分秒System.out.println(LocalTime.of(12,30,30));//(5)指定获取时分System.out.println(LocalTime.of(12,30));//(6)指定获取时分秒纳秒System.out.println(LocalTime.of(12,30,30,123));//(7)获取小时字段System.out.println("时: "+LocalTime.now().getHour());//(8)获取分钟字段System.out.println("时: "+LocalTime.now().getMinute());//(9)获取秒字段System.out.println("时: "+LocalTime.now().getSecond());//(10)获取纳秒字段System.out.println("时: "+LocalTime.now().getNano());//B.计算//(1)增加一小时System.out.println("增加1小时: "+LocalTime.now().plusHours(1));//(2)增加三十分钟System.out.println("增加30分钟: "+LocalTime.now().plusMinutes(30));//(3)增加三十秒System.out.println("增加30秒: "+LocalTime.now().plusSeconds(30));//(4)增加一万纳秒System.out.println("增加10000纳秒:"+LocalTime.now().plusNanos(10000));//(5)减少一小时System.out.println("减少1小时: "+LocalTime.now().minusHours(1));//(6)减少三十分钟System.out.println("减少30分钟: "+LocalTime.now().minusMinutes(30));//(7)减少三十秒System.out.println("减少30秒: "+LocalTime.now().minusSeconds(30));//(8)减少一万纳秒System.out.println("减少10000纳秒:"+LocalTime.now().minusNanos(10000));//C.比较//(1)时间与另一个时间比较 0(相等)正数(大)负数(小)System.out.println(LocalTime.now().compareTo(LocalTime.now()));//(2)检查时间是否在指定时间之后System.out.println(LocalTime.now().isAfter(LocalTime.now()));//(3)检查时间是否在指定时间之前System.out.println(LocalTime.now().isBefore(LocalTime.now()));
2.2、LocalTime与 String 之间的转换
//(1)从文本字符串获取LocalTime实例LocalTime localTime1=LocalTime.parse("12:30:30");System.out.println(localTime1);//(2)使用特定格式化形式从文本字符串获取LocalTime实例LocalTime localTime2=LocalTime.parse("12:30:30",DateTimeFormatter.ofPattern("HH:mm:ss"));System.out.println(localTime2);//(3)使用特定格式化形式将LocalTime转为字符串DateTimeFormatter df1=DateTimeFormatter.ofPattern("HH:mm:ss");LocalTime localTime3=LocalTime.now();System.out.println(localTime3.format(df1));
3、LocalDateTime
LocalDateTime是一个不可变的日期时间对象,代表日期时间,格式为 年 - 月 - 日 - 时 - 分 - 秒,这个类是不可变的和线程安全的。
方法 | 描述 |
---|---|
static LocalDateTime now() | 获取默认时区的当前日期时间 |
static LocalDateTime now(Clock clock) | 从指定时钟获取当前日期时间 |
static LocalDateTime now(ZoneId zone) | 获取指定时区的当前日期时间 |
static LocalDateTime of(LocalDate date, LocalTime time) | 根据日期和时间对象获取LocalDateTime 实例 |
static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second) | second) 根据指定的年、月、日、时、分、秒获取LocalDateTime 实例 |
getYear | 获取年份 |
getMonth | 使用月份枚举类获取月份 |
getDayOfMonth | 获取日期在该月是第几天 |
getDayOfWeek | 获取日期是星期几 |
getDayOfYear | 获取日期在该年是第几天 |
getHour | 获取小时 |
getMinute | 获取分钟 |
getSecond | 获取秒 |
getNano | 获取纳秒 |
plusYears | 增加年 |
plusMonths | 增加月 |
plusWeeks | 增加周 |
plusDays | 增加天 |
plusHours | 增加小时 |
plusMinutes | 增加分 |
plusSeconds | 增加秒 |
plusNanos | 增加纳秒 |
minusYears | 减少年 |
minusMonths | 减少月 |
meminusWeeks | 减少周 |
minusDays | 减少天 |
minusHours | 减少小时 |
minusMinutes | 减少分 |
minusSeconds | 减少秒 |
minusNanos | 减少纳秒 |
isEqual | 判断日期时间是否相等 |
isBefore | 检查是否在指定日期时间之前 |
isAfter | 检查是否在指定日期时间之后 |
3.1、LocalDateTime常用API
代码如下(示例):
//A.获取//(1)获取默认时区的当前日期时间System.out.println(LocalDateTime.now());//(2)获取指定时区的当前日期时间System.out.println(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));//(3)从指定时钟获取当前日期时间System.out.println(LocalDateTime.now(Clock.systemDefaultZone()));//(4)根据日期和时间对象获取LocalDateTime实例System.out.println(LocalDateTime.of(LocalDate.now(),LocalTime.now()));//(5)根据指定的年、月、日、时、分、秒获取LocalDateTime实例System.out.println(LocalDateTime.of(2019,12,7,21,48,50));//(6)获取年份System.out.println("年 : "+LocalDateTime.now().getYear());//(7)使用月份枚举类获取月份System.out.println("月(英文) : "+LocalDateTime.now().getMonth());//(8) 使用月份数字类获取月份System.out.println(" 月(数字英文): "+LocalDateTime