日期总结(java8新特性及其他相关知识点)

目录

1 使用新时间日期API的必要性

2 新时间日期API常用、重要对象介绍

3 相关案例解析分析(重要)

重点推荐类:


1 使用新时间日期API的必要性

在java8以前,或许:

  • 当你在做有关时间日期的操作时,你会想到用Date;
  • 当你在做日期、月份、天数相加减时,你会想到用Calendar;
  • 当你需要对时间日期进行格式化时,你会想到使用SimpleDateFormat或DateFormat下的其他子类;

        但是,你必须知道,以上有关的时间日期操作对象,都是可变的、线程不安全的,同时,如果作为一个经常写过类似代码的人来说,尽管有相关对象提供某些操作,但并不能很快、很简单的就能得到最终想要的结果,如:要计算两个时间点之间相差的年、月、日、周、时、分、秒等,这些计算尽管原有API也能够实现,但原有API除了线程不安全之外,另外一个不足之处就是代码繁琐,性能低!

        为何我们总提多线程下,线程不安全?对于初学者来说,可能觉得能够简单实现出功能就已经足够,但是真正的开发项目是不可能仅仅考虑功能的实现的,还要考虑项目的安全性、稳定性、高性能、高可用性等等!因此,作为java开发者,多线程的知识是必不可少的。而也正因为多线程,才会出现一大堆问题(简称线程安全性问题),作为开发者,就应该写出不仅能实现功能的代码,还要是线程安全的代码。那么,学习并熟悉掌握新的线程安全的API就显得非常重要了!

没错,java8出的新的时间日期API都是线程安全的,并且性能更好,代码更简洁!

2 新时间日期API常用、重要对象介绍

        LocalDate、LocalTime、LocalDateTime是新API里的基础对象,绝大多数操作都是围绕这几个对象来进行的,有必要搞清楚:

        LocalDate : 只含年月日的日期对象

        LocalTime :只含时分秒的时间对象

        LocalDateTime : 同时含有年月日时分秒的日期对象


3 相关案例解析分析(重要)

3.1 获取当前时间:LocalDateTime date= LocalDateTime.now();

3.2 日期格式化

        a、localDateTime格式化

        String format = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

        打印format:2020-10-10 15:15:10

        b、LocalDate格式化

        LocalDate now = LocalDate.now();// 当前时间

        String format = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

        打印format:2020-10-10

3.3 日期转换

        a、日期转为字符串

        String format = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

        打印format:2020-10-10 15:15:10

        b、字符串转为日期

        String date= "2018-06-01 10:12:05";

        LocalDateTime ldt = LocalDateTime.parse(date,DateTimeFormatter.ofPattern("yyyy-

MM-dd HH:mm:ss"));

        打印结果:2018-06-01T10:12:05

LocalDateTime endTime = LocalDateTime.parse("2024-03-07 23:59:59", DatePattern.NORM_DATETIME_FORMATTER); // 结束时间

        c、LocalDate转为Date

        Date.from(date.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());

        d、Date转为LocalDate

        Date date = new Date();

        LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

LocalDate转为LocalDateTime
String fora = "2024-01-16";
LocalDate localDate = LocalDateTimeUtil.parseDate(fora);
LocalDateTime localDateTime = localDate.atTime(LocalTime.now());

3.4 日期相加减

        相加

        LocalDateTime plusDaysResult = date.plusDays(7L);//加天数

        LocalDateTime plusYearsResult = date.plusYears(2L);//加年份

        LocalDateTime plusMonthsResult = date.plusMonths(3L);//加月份

        LocalDateTime plusHoursResult = date.plusHours(2L);//加小时

        LocalDateTime plusMinutesResult = date.plusMinutes(10L);//加分钟数

        LocalDateTime plusSecondsResult = date.plusSeconds(10L);//加秒数

        相减

        LocalDateTime plusDaysResult = date.minusDays(7L);//减天数

        LocalDateTime plusYearsResult = date.minusYears(2L);//减年份

        LocalDateTime plusMonthsResult = date.minusMonths(3L);//减月份

        LocalDateTime plusHoursResult = date.minusHours(2L);//减小时

        LocalDateTime plusMinutesResult = date.minusMinutes(10L);//减分钟数

        LocalDateTime plusSecondsResult = date.minusSeconds(10L);//减秒数

3.5 日期比较

关键词:isAfter isBefore equals

        isAfter:比较时间之后

        isBefore :比较时间之前

        equals:相等

案例:

LocalDateTime nowTime= LocalDateTime.now();

LocalDateTime endTime = LocalDateTime.of(2017, 10, 22, 10, 10, 10);

nowTime.isAfter(endTime);  //比较 现在的时间 比 设定的时间 之后

nowTime.isBefore(endTime) // 现在的时间 比 设定的时间 之前

nowTime.equals(endTime) //比较 现在的时间 和 设定的时候 相等

3.6 其他

        获取当月第一天

        date.with(TemporalAdjusters.firstDayOfMonth());

        获取当月最后一天

        date.with(TemporalAdjusters.lastDayOfMonth());

        LocalDateTime now = LocalDateTime.now();

        System.out.println("当前年:"+now.getYear());

        System.out.println("当前月:"+now.getMonthValue());

        System.out.println("当前日:"+now.getDayOfMonth());

        System.out.println("在本年第"+now.getDayOfMonth()+"日");

        System.out.println("在本年第"+now.getDayOfMonth()+"星期");

3.7 使用LocalDateTime计算两个时间的差

        LocalDateTime now = LocalDateTime.now(); //开始时间

        LocalDateTime end = LocalDateTime.now();//最后时间

        Duration duration = Duration.between(now,end);

        long days = duration.toDays(); //相差的天数

        long hours = duration.toHours();//相差的小时数

        long minutes = duration.toMinutes();//相差的分钟数

        long millis = duration.toMillis();//相差毫秒数

        long nanos = duration.toNanos();//相差的纳秒数

        ..........................


4 日期转换工具类:

public static void main(String[] args) throws Exception{
        // 1 日期转字符串
        String NORM_DATETIME_PATTERN = DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN);
        System.out.println(NORM_DATETIME_PATTERN);

        String format = LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.NORM_DATETIME_PATTERN);
        System.out.println(format);
    }

5 重点推荐类:

DatePattern.java,可提供很多常量配置,如下:
"yyyy-MM-dd"
"yyyy-MM-dd HH:mm"

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天雨编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值