在看题的时候发现了Java8中新加入的日期时间类,觉得这个小哥写的不错,自己也跟着练习下。原文地址:https://blog.csdn.net/yy139926/article/details/124298574
前言:
Java中1.8之前有date类,date类到了1.8大部分的方法被弃而且date类如果不格式化可读性十分差,而simpledateformat方法中format和parse方法都是线程不安全的。Java1.8之后出现了localdate,localdatetime,localtime这些类,而这些类使用了final来修饰,使得这些类是不可变的,一旦实例化,值就固定了,有点类似于String类,所以这些类都是线程安全的。
一、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-07-07
- System.out.println(LocalDate.now());
- //(2)获取指定日期 2000-03-05
- System.out.println(LocalDate.of(2014, 3, 5));
- //(3)获取日期的年份 2022
- System.out.println(LocalDate.now().getYear());
- //(4)获取日期的月份 7
- System.out.println(LocalDate.now().getMonthValue());
- //(5)获取日期的日子 7
- System.out.println(LocalDate.now().getDayOfMonth());
- //(6)获取日期的星期 THURSDAY
- System.out.println(LocalDate.now().getDayOfWeek());
- //(7)当天所在这一年的第几天 188
- System.out.println(LocalDate.now().getDayOfYear());
- //(8)获取当年天数 365
- System.out.println(LocalDate.now().lengthOfYear());
- //(9)获取当月天数 31
- System.out.println(LocalDate.now().lengthOfMonth());
- //(10)与时间纪元(1970年1月1日)相差的天数,负数表示在时间纪元之前多少天 19180
- System.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)替换年份:2000-07-07
- System.out.println("替换年份为2000:" + LocalDate.now().withYear(2000));
- //(2)替换月份:2020-01-07
- System.out.println("替换月份为1:" + LocalDate.now().withMonth(1));
- //(3)替换日子:2020-07-01
- 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转化为Date
- ZonedDateTime zonedDateTime = LocalDate.now().atStartOfDay(ZoneId.systemDefault());
- Date date = Date.from(zonedDateTime.toInstant());
- System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
- //(2)Date转化为LocalDate
- LocalDate localDate = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
- System.out.println(localDate.format(DateTimeFormatter.ISO_LOCAL_DATE));
复制代码 二、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.294
- System.out.println(LocalTime.now());
- //(2)获取指定时区的当前时间 14:11:31.392
- System.out.println(LocalTime.now(ZoneId.of("Asia/Shanghai")));
- //(3)从指定时钟获取当前时间 14:11:31.392
- System.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));
复制代码 三、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().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
- //(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.now().getMonth().getValue());
- //(9)获取日期在该月是第几天
- System.out.println("天 : " + LocalDateTime.now().getDayOfMonth());
- //(10)获取日期是星期几(英文)
- System.out.println("星期几(英文) : " + LocalDateTime.now().getDayOfWeek());
- //(11)获取日期是星期几(数字英文)
- System.out.println("星期几(数字英文) : " + LocalDateTime.now().getDayOfWeek().getValue());
- //(12)获取日期在该年是第几天
- System.out.println("本年的第几天 : " + LocalDateTime.now().getDayOfYear());
- //(13)获取小时
- System.out.println("时: " + LocalDateTime.now().getHour());
- //(14)获取分钟
- System.out.println("分: " + LocalDateTime.now().getMinute());
- //(15)获取秒
- System.out.println("秒: " + LocalDateTime.now().getSecond());
- //(16)获取纳秒
- System.out.println("纳秒: " + LocalDateTime.now().getNano());
- //B.计算
- //(1)增加天数
- System.out.println("增加天数 : " + LocalDateTime.now().plusDays(1));
- //(2)增加周数
- System.out.println("增加周数 : " + LocalDateTime.now().plusWeeks(1));
- //(3)增加月数
- System.out.println("增加月数 : " + LocalDateTime.now().plusMonths(1));
- //(4)增加年数
- System.out.println("增加年数 : " + LocalDateTime.now().plusYears(1));
- //(5)减少天数
- System.out.println("减少天数 : " + LocalDateTime.now().minusDays(1));
- //(6)减少月数
- System.out.println("减少月数 : " + LocalDateTime.now().minusMonths(1));
- //(7)减少周数
- System.out.println("减少周数 : " + LocalDateTime.now().minusWeeks(1));
- //(8)减少年数
- System.out.println("减少年数 : " + LocalDateTime.now().minusYears(1));
- //(9)增加小时
- System.out.println("增加1小时: " + LocalDateTime.now().plusHours(1));
- //(10)增加分钟
- System.out.println("增加30分钟: " + LocalDateTime.now().plusMinutes(30));
- //(11)增加秒数
- System.out.println("增加30秒: " + LocalDateTime.now().plusSeconds(30));
- //(12)增加纳秒
- System.out.println("增加10000纳秒:" + LocalDateTime.now().plusNanos(10000));
- //(13)减少小时
- System.out.println("减少1小时:" + LocalDateTime.now().minusHours(1));
- //(14)减少分钟
- System.out.println("减少30分钟:" + LocalDateTime.now().minusMinutes(30));
- //(15)减少秒数
- System.out.println("减少30秒: " + LocalDateTime.now().minusSeconds(30));
- //(16)减少纳秒
- System.out.println("减少10000纳秒:" + LocalDateTime.now().minusNanos(10000));
- //C.比较
- //(1)判断日期时间是否相等
- System.out.println(LocalDateTime.now().isEqual(LocalDateTime.now()));
- //(2)检查是否在指定日期时间之前
- System.out.println(LocalDateTime.now().isBefore(LocalDateTime.now()));
- //(3)检查是否在指定日期时间之后
- System.out.println(LocalDateTime.now().isAfter(LocalDateTime.now()));
复制代码 3.2、LocalDateTime与 String 之间的转换
- //(1)获取日期部分
- System.out.println(LocalDateTime.now().toLocalDate());
- //(2)获取时间部分:时、分、秒
- System.out.println(LocalDateTime.now().toLocalTime().format(DateTimeFormatter.ofPattern("HH:mm:ss")));
- //(3)从文本字符串获取LocalDateTime实例
- LocalDateTime ldt2 = LocalDateTime.parse("2019-12-07T21:20:06.303995200");
- System.out.println(ldt2.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
- //(4)使用特定格式化形式从文本字符串获取LocalDateTime实例
- DateTimeFormatter df1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
- LocalDateTime ldt3 = LocalDateTime.parse("2019-12-07 21:20:06", df1);
- System.out.println(ldt3);
- //(5)使用特定格式化形式将LocalDateTime转为字符串
- String ldt4 = df1.format(ldt3);
- System.out.println(ldt4);
复制代码 3.3、LocalDateTime与 Date之间的转换
- //(1)LocalDateTime转化为Date
- ZonedDateTime zdt = LocalDateTime.now().atZone(ZoneId.systemDefault());
- Date date1 = Date.from(zdt.toInstant());
- System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date1));
- //(2)Date转化为LocalDateTime
- LocalDateTime localDateTime = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
- System.out.println(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |