Java8 日期时间API

一、转换

1、转字符串

1.1、LocalDateTime与字符串

//LocalDateTime 转 字符串
String str = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
//字符串 转 LocalDateTime
 LocalDateTime localDateTime = LocalDateTime.parse("2019-06-26 19:00:00",
                                          DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

1.2、LocalDate与字符串

/**
  * String转LocalDate
  * @param dateStr        日期的字符串
  * @param pattern        格式示例: yyyy-MM-dd
  * @return
  */
public static LocalDate toLocalDate(String dateStr, String pattern) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
    return LocalDate.parse(dateStr, formatter);
}

/**
  * LocalDate转String
  * @param localDate   localDate对象
  * @param pattern        格式示例: yyyy-MM-dd
  * @return
  */
public static String LocalDatetoStr(LocalDate localDate, String pattern) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
    return localDate.format(formatter);
}

2、与Date

// Date 转 LocalDateTime 与 LocalDate
Date date = new Date();
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
LocalDate localDate = instant.atZone(zoneId).toLocalDate();
//也可以使用LocalDateTime的FactoryInput()方法使用系统的默认时区
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), zoneId);
2小时2分8秒

Process finished with exit code 0

注:严格间隔不足24小时的相差天数会得到0,如果不考虑具体的时分秒可转换为LocalDate类型再求值。

四、日期格式化

JDK8之前:SimpleDateFormat来进⾏格式化,但SimpleDateFormat并不是线程安全的
JDK8之后:引⼊线程安全的⽇期与时间DateTimeFormatter

LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String ldtStr = dtf.format(ldt);
System.out.println(ldtStr);

获取指定的⽇期时间对象

LocalDateTime ldt = LocalDateTime.of(2020, 11, 11, 8, 20, 30);
System.out.println(ldt);

五、常用API

public static void main(String[] args) throws InterruptedException {
        System.out.println("当前日期:");
        LocalDate currentDate = LocalDate.now();
        System.out.println(currentDate);
        System.out.println("----------------------------------");
        System.out.println("当前日期的周一与周日:");
        LocalDate monday = currentDate.with(DayOfWeek.MONDAY);
        LocalDate sunday = currentDate.with(DayOfWeek.SUNDAY);
        System.out.println(monday + " 与 " + sunday);
        System.out.println("----------------------------------");
        System.out.println("当天周日期:");
        String currentDayOfWeek = currentDate.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINA);
        System.out.println(currentDayOfWeek);
        System.out.println(currentDate.getDayOfWeek().getValue());
        System.out.println("----------------------------------");
        System.out.println("当月第一天日期:");
        LocalDate firstDayOfMonth = currentDate.with(TemporalAdjusters.firstDayOfMonth());
        System.out.println(firstDayOfMonth);
        System.out.println("----------------------------------");
        System.out.println("当月最后一天日期:");
        LocalDate lastDayOfMonth = currentDate.with(TemporalAdjusters.lastDayOfMonth());
        System.out.println(lastDayOfMonth);
        System.out.println("----------------------------------");
        System.out.println("当月最后一天周日期:");
        String lastDayOfWeek = lastDayOfMonth.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINA);
        System.out.println(lastDayOfWeek);
        System.out.println("----------------------------------");
        System.out.println("当前日期后天周日期(数字):");
        System.out.println(currentDate.plusDays(2).getDayOfWeek().getValue());
        System.out.println("----------------------------------");
        System.out.println("当天开始时间与结束时间:");
        System.out.println(LocalDate.now().atStartOfDay());
        System.out.println(LocalDate.now().atTime(LocalTime.MIN));
        System.out.println(LocalDate.now().atTime(LocalTime.MAX));
    }

Java8 日期时间API

注:
System.out.println(LocalDate.now().atTime(LocalTime.MIN));
System.out.println(LocalDate.now().atTime(LocalTime.MAX));
如果是LocalDateTime类型需使用下面API达到相同效果
LocalDateTime.now().with(LocalTime.MIN)
LocalDateTime.now().with(LocalTime.MAX);
//手动设置具体时分秒
LocalDateTime.of(LocalDate.now(),LocalTime.of(10,0,0));
或者:
LocalDate.now().atTime(LocalTime.of(10,0,0));

扩展:

TemporalAdjuster:时间矫正器

有时我们可能需要获取一个周末,或者下一个工作日等时间,这里 java8 就为我们提供了一个时间校正器,让我们对时间进行校准。

TemporalAdjusters:该类通过静态方法提供了大量的常用的TemporalAdjuster的实现供我们使用。

在localDateTime中,有一个with方法,其中可以让我们去写一TemporalAdjuster接口,而TemporalAdjusters类中,有许多常用的方法

TemporalAdjusters 包含许多静态方法,可以直接调用,以下列举一些:

方法名描述 dayOfWeekInMonth 返回同一个月中每周的第几天 firstDayOfMonth 返回当月的第一天 firstDayOfNextMonth 返回下月的第一天 firstDayOfNextYear 返回下一年的第一天 firstDayOfYear 返回本年的第一天 firstInMonth 返回同一个月中第一个星期几 lastDayOfMonth 返回当月的最后一天 lastDayOfNextMonth 返回下月的最后一天 lastDayOfNextYear 返回下一年的最后一天 lastDayOfYear 返回本年的最后一天 lastInMonth 返回同一个月中最后一个星期几 next / previous 返回后一个/前一个给定的星期几 nextOrSame / previousOrSame 返回后一个/前一个给定的星期几,如果这个值满足条件,直接返回

参考文章:

https://blog.csdn.net/qq_44749491/article/details/130123065

Original: https://www.cnblogs.com/better-farther-world2099/p/11912052.html
Author: 奕锋博客
Title: Java8 日期时间API

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684150/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 微服务拆分需要考虑的必要因素与坚持原则

    前言:创业公司往往因为有限的时间和投入,把系统所有的功能都聚集在一起。随着业务的不断发展,技术人员开始不断地对架构进行解耦和拆分。微服务在最近几年大行其道,很多公司的研发人员都在考…

    技术杂谈 2023年5月31日
    078
  • 开放的智力

    这本书很赞,是教人如何去学习,如何去思考的。 看这本书的时候,我在想我年少的时候怎么没有人和我讨论这些问题。 这本书没有实体书,只有kindle电子书,建议下载kindle阅读软件…

    技术杂谈 2023年5月31日
    0118
  • 打呼噜治疗方法

    在知乎上看到的: 既然鼾声的真正源头是松弛的咽腔肌肉,最根本的解决方法就是锻炼咽腔肌肉,增强肌肉力量,使它变得结实坚硬。 前三个练习锻炼整个咽腔肌肉,最后一个练习则是单独针对软腭的…

    技术杂谈 2023年6月1日
    095
  • SpringMVC详解

    SpringMVC的介绍 【1】Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就已包含在Spring框架中。正式名称” Spri…

    技术杂谈 2023年7月24日
    085
  • 深入C++03:面向对象

    📕面向对象 类和对象、this指针 不用做太多笔记,都可以看初识C++的笔记; 记住👀:声明后面都要加” ;“,比如声明方法和变量还有…

    技术杂谈 2023年7月25日
    071
  • SSM实战(60)在线教育(60)后/前端(27)课程管理(15)课程列表

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/qiu-hua/p/16515184.htmlAutho…

    技术杂谈 2023年6月1日
    090
  • Elasticsearch性能优化汇总——写入&搜索

    在Elasticsearch的默认设置下,是综合考虑数据可靠性、搜索实时性、写入速度等因素的。当离开默认设置、追求极致的写入速度时,很多是以牺牲可靠性和搜索实时性为代价的。有时候,…

    技术杂谈 2023年7月24日
    055
  • WPS word文档中所有图片批量居中对齐

    WPS word文档中所有图片批量居中对齐 ctrl+F 调出 查找和替换 对话框 看图操作 posted @2022-06-06 12:18 行走的思想 阅读(776 ) 评论(…

    技术杂谈 2023年5月31日
    0245
  • 【转】iOS中的md5,crc32校验

    在使用URLSession下载一个文件过程中,如何校验呢? md5算法在ios中实现 我们在下载后会拿到一个NSData. const char str = (const char…

    技术杂谈 2023年6月1日
    0106
  • 你的哪些骚操作会导致SegmentationFault😂

    你的哪些骚操作会导致Segmentation Fault😂 前言 如果你是一个写过一些C程序的同学,那么很大可能你会遇到魔幻的 segmentation fault,可能一时间抓耳…

    技术杂谈 2023年7月23日
    073
  • 尝试理解Linux容器进程与宿主机共享内核的具体含义

    背景 近期接触容器技术时,经常看到各类比较容器与虚拟机区别的文章中会提到:容器是共享宿主机的内核,而虚拟机则是拥有自己独立的内核,所以不可能在Linux上用容器运行windows,…

    技术杂谈 2023年6月21日
    0104
  • 工作经验总结

    最近一段时间,因为好多生活和工作上的事情,好久没有更新博客了。虽然我一直有很多的想法,可是大多数往往往往都会因为下面一些原因坚持不下去: 生活和工作琐事繁多 感觉个人技能还不熟练,…

    技术杂谈 2023年6月1日
    083
  • cocos 防坑总结

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/xiaohuochai/p/10013271.htmlA…

    技术杂谈 2023年5月30日
    085
  • WINDOWS下JMETER压测端口占用问题

    2 压测环境配置 压测发起设备:windows 10网络:局域网压测软件:Jmeter 5.0压测系统内存:Ubuntu 4核8GPHP 版本:php7.1.23Nginx 版本:…

    技术杂谈 2023年5月31日
    085
  • zookeeper_overview

    概述 zk 是一个开源的,分布式协调服务,它的目的就是为了服务于分布式应用。zk 允许分布式应用通过 zk 的节点进行相互协调,常见的有配置同步、分布式锁、微服务注册与发现等等。 …

    技术杂谈 2023年7月24日
    086
  • 基础篇——PycharmProfessional(专业版)免费激活

    背景故事 Pycharm是一个Python编程首推的软件,但只有community(社区版)是免费的,很多高级功能,比如远程调试这些都需要Professional(专业版)才有,在…

    技术杂谈 2023年7月23日
    0123
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球