Java8新特性——新时间日期API

面向面试编程:Java8新特性——Optional类和新时间日期API Optional是一个没有子类的工具类,Optional是一个可以为null的容器对象,它的主要作用就是为了避免Null检查,防止NullpointerException。JDK 8中增加了一套全新的日期时间API,这套API设计合理,是线程安全的。新的日期及时间API位于 java.time 包 中,下面是一些关键类。LocalDate :表示日期,包含年月日,格式为 2019-10-16LocalTime :表示时间,包含时分秒,格式为 16:38:54.158549300。 阅读详情

以前的时间API是线程不安全的,是可变的

多线程对日期进行处理要加锁

LocalDate、LocalTime、LocalDateTime 类的实例是不可变的对象,分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的日期或时间,并不包含当前的时间信息。也不包含与时区相关的信息。

    //1.LocalDate    LocalTime   LocalDateTime  用法一样,用于让人读的时间日期
    @Test 
    public void test1(){
        LocalDateTime ldt=LocalDateTime.now();//获取当前日期时间
        System.out.println(ldt);

        LocalDateTime ldt2=LocalDateTime.of(2015,10,19,13,22,33);//指定一个日期时间
        System.out.println(ldt2);

        LocalDateTime ldt3=ldt.plusYears(2);//加2年
        System.out.println(ldt3);

        LocalDateTime ldt4=ldt.minusMonths(2);//减2个月
        System.out.println(ldt4);

        System.out.println(ldt.getYear());
        System.out.println(ldt.getMonthValue());
        System.out.println(ldt.getDayOfMonth());
        System.out.println(ldt.getHour());
        System.out.println(ldt.getMinute());
        System.out.println(ldt.getSecond());
    }

    //2.Instant:时间戳(以Unix元年: 1970年1月1日00:00:00到某个时间之间的毫秒值)
    @Test
    public void test2(){
        Instant ins1=Instant.now();//默认获取UTC时区的时间
        System.out.println(ins1);

        OffsetDateTime odt=ins1.atOffset(ZoneOffset.ofHours(8));//获取偏移日期时间,加8小时偏移
        System.out.println(odt);

        System.out.println(ins1.toEpochMilli());//获取与Unix元年间隔毫秒数

         Instant ins2=Instant.ofEpochSecond(60);//较Unix元年加60秒
         System.out.println(ins2);//1970-01-01T00:01:00Z
    }

    //3.Duration:计算两个时间之间的间隔,Period:计算两个日期之间的间隔
    @Test
    public void test3(){
        Instant ins1=Instant.now();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
        }
        Instant ins2=Instant.now();
        Duration duration=Duration.between(ins1, ins2);
        System.out.println(duration.toMillis());//1000

        System.out.println("------------------------------");

        LocalTime lt1=LocalTime.now();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
        }
        LocalTime lt2=LocalTime.now();
        System.out.println(Duration.between(lt1, lt2).toMillis());//1001

        System.out.println("------------------------------");

        LocalDate ld1=LocalDate.of(2015, 1, 1);
        LocalDate ld2=LocalDate.now();
        Period period=Period.between(ld1, ld2);
        System.out.println(period.getYears());//2
        System.out.println(period.getMonths());//6
        System.out.println(period.getDays());//19
    }
    //TemporalAdjuster:时间校验器
    @Test
    public void test5(){
        LocalDateTime ldt=LocalDateTime.now();
        System.out.println(ldt);//2017-07-20T19:28:57.822

        LocalDateTime ldt2=ldt.withDayOfMonth(10);
        System.out.println(ldt2);//2017-07-10T19:28:57.822

        LocalDateTime ldt3=ldt.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));//调整为下个周日
        System.out.println(ldt3);//2017-07-23T19:31:39.479

        //自定义:下一个工作日
        LocalDateTime ldt5=ldt.with((l)->{
            LocalDateTime ldt4=(LocalDateTime)l;
            DayOfWeek dow=ldt4.getDayOfWeek();//获取当前星期
            if(dow.equals(DayOfWeek.FRIDAY)){//如果是周5,下个工作日即加3天
                return ldt4.plusDays(3);
            }else if(dow.equals(DayOfWeek.SATURDAY)){//如果是周6,下个工作日即加2天
                return ldt4.plusDays(2);
            }else{
                return ldt4.plusDays(1);//其他,下个工作日即为明天
            }
        });
        System.out.println(ldt5);//2017-07-21T19:37:05.533
    }

    //DateTimeFormatter:格式化时间/日期
    @Test
    public void test6(){
        DateTimeFormatter dtf=DateTimeFormatter.ISO_DATE;
        LocalDateTime ldt=LocalDateTime.now();

        String strDate=ldt.format(dtf);
        System.out.println(strDate);

        System.out.println("------------------------");

        DateTimeFormatter dtf2=DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");//自定义格式化格式
        String strDate2=dtf2.format(ldt);
        System.out.println(strDate2);//2017年07月20日 19:49:53

        LocalDateTime newDate=ldt.parse(strDate2,dtf2);//以指定格式解析字符串,重新获得LocalDateTime类型
        System.out.println(newDate);//2017-07-20T19:49:53
    }

    //ZonedDate、ZonedTime、ZonedDateTime
    @Test
    public void test7(){
        Set<String> set=ZoneId.getAvailableZoneIds();//获取支持的所有时区
        set.forEach(System.out::println);

        LocalDateTime ldt=LocalDateTime.now(ZoneId.of("Europe/Monaco"));//获取指定时区的日期时间类型
        System.out.println(ldt);//2017-07-20T14:01:23.417

        LocalDateTime ldt2=LocalDateTime.now(ZoneId.of("Europe/Monaco"));
        ZonedDateTime zdt=ldt2.atZone(ZoneId.of("Europe/Monaco"));//获取带时区的时间类型
        System.out.println(zdt);//2017-07-20T14:01:23.420+02:00[Europe/Monaco]//与UTC时间有2个小时的时差
    }

与传统日期处理的转换
这里写图片描述

分享一下使用Xilinx FPGA驱动MIPI DSI LCD屏的心路历程 分享一下调试用Xilinx FPGA驱动MIPI DSI LCD屏的心路历程,看到的朋友们,可以避免继续踩坑。 阅读详情

相关推荐

【网络安全】Centos7安装杀毒软件----ClamAV

Clam AntiVirus是一个Linux系统上使用的反病毒软件包。主要应用于邮件服务器,采用多线程后台操作,可以自动升级病毒库。

你在看屏幕的同时,屏幕也在注视着你 8827

java8(jdk1.8、jdk8)新特性,Lambda表达式、函数式接口、方法引用与构造器引用、Stream API、新时间日期API

JAVA 8(又名jdk 1.8或者jdk8)是oracle公司2014年3月份发布的。众所周知,jdk8可以看成是jdk5发布以来最具有革命性的一代,其新增了很多新特性,为我们的编程带来了极大的便捷,现在很多公司开发都是使用的java 8。java8 之前,往接口里新加一个方法,那么所有的实现类都需要变动,都需要同步实现这个方法。java8 给接口新增了两个关键字:default和static,使得可以往接口里添加默认方法,子类可以无需变动。

sunzixiao的博客 4273

【一键搞定】ThinkPHP6.0.2+PHPStudy+Composer极速安装指南——附完整下载包与避坑技巧

本文提供了一份ThinkPHP6.0.2的完整下载包,并详细介绍了如何配合PHPStudy和Composer进行极速安装与配置。指南涵盖了环境准备、Composer国内镜像加速、项目部署及常见避坑技巧,旨在帮助开发者,尤其是内网或网络不佳的用户,快速搭建可运行的TP6开发环境,绕过依赖下载的繁琐步骤。

assembly8low的博客 1005

Java8 新特性 之 新时间日期 API

目录 Java8 新特性 之 Lambda表达式 Java8 新特性 之 函数式接口 Java8 新特性 之 方法引用与构造器引用 Java8 新特性 之 Stream API Java8 新特性 之 新时间日期 API Java8中的LocalDateTime 工具使用 Java8 新特性 之 接口中的默认方法与静态方法 Java8 新特性 之 其他新特性 Java8 新特性 ...

超人不会飞 539

棋牌App逆向工程实战:透视风险分析与反作弊加固思路

在移动应用安全领域,逆向工程是一项关键的攻防技术,它通过静态分析、动态调试与协议抓包等手段,深入还原客户端真实逻辑。这项技术的核心原理,是从已编译的安装包中提取数据流,验证服务端下发的信息是否超出了客户端应有的可见范围。从技术价值看,安全测试人员可以借此定位协议层、内存层与缓存层的潜在风险,为反作弊体系提供精准的加固建议。在棋牌类App等实时对局场景中,逆向工程常被用于排查牌局信息泄露类隐患,而合规授权与测试环境是开展此类研究的必要前提。本文结合一次棋牌App的安全评估实践,梳理了从环境准备到数据流还原的完

weixin_29326909的博客 172

带隙基准电路实战:温度补偿与流片调优全解析

带隙基准(BGR)是模拟芯片中实现高精度、低温漂电压参考的核心电路,其本质是利用硅材料禁带宽度的物理稳定性,通过PTAT(正温度系数)与CTAT(负温度系数)电压的加权叠加抵消温度影响。原理上需兼顾一阶线性补偿与二阶曲率校正,技术价值在于支撑ADC/DAC/LDO等关键模块的精度与可靠性。典型应用场景涵盖车规级MCU、工业传感器和高精度电源管理芯片。工程落地难点集中于工艺偏差、运放失调、寄生效应及版图热电耦合——这正是‘带隙基准设计’与‘带隙基准调优’的根本分野。本文聚焦真实流片经验,深入拆解Widlar架

weixin_42628280的博客 253

[Java8新特性]:新时间日期API

新时间日期API (1)、java.time包构成 java.time:包含值对象的基础包 java.time.chrono:提供对不同的日历系统的访问 java.time.format:格式化和解析时间和日期 java.time.temporal:包括底层框架和扩展特性 java.time.zone:包含时区支持的类 (2)、java.time 本地日期时间类 LocalDate...

胖子 307

DXF转G代码是圆弧的方向如何确定?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1185

Java8的新特性--新时间日期API

目录一、简单介绍二、常见用法示例2.1 LocalDateTime、 LocalDate、 LocalTime2.1.1 获取当前时间2.1.2 时间日期的比较和运算判断2.1.3 时间日期的转换2.2 Instant 时间戳2.3 ZoneId2.5 Duration、Period 计算时间间隔2.6 TemporalAdjuster 时间矫正器 Java8提供了一套全新的日期时间API,都位于java.time包下,这个包涵盖了所有处理日期date、时间time、日期/时间dateTime、时区zo

qianqian的博客 442

【感知模块算法】障碍物detect+trace+prediction方向介绍

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、多维度看感知问题,体会复杂性二、障碍物/环境目标detect方向1.视觉目标检测方向(1)图像处理认知(2)视觉基础理论部分1、获取数据集---python网页爬虫、买数据、自己录数据、使用开源比赛的数据集2、opencv库的学习3、深度学习框架学习(3)视觉目标检测理论(1)目标检测的概念(2)目标检测的应用场景(3)现有目标检测框架原理及论文【这仅仅是我当初入门学习的框架~

qq_35635374的博客 2893

北斗导航 | ChatGPT之RTK、RTD、ARAIM算法原理及程序代码(ChatGPT看你怎么回答,附部分代码)

ChatGPT之RTK、RTD、ARAIM算法原理及程序代码

尘世冰封的专栏 3676

Java8新特性(五)————— 串行流、并行流、新时间日期API

关注微信公众号【行走在代码行的寻路人】获取Java相关资料,分享项目经验及知识干货。 串行流与并行流 并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。Java 8 中将并行进行了优化,我们可以很容易的对数据进行并行操作。Stream API 可以声明性地通过 parallel() 与sequential() 在并行流与顺序流之间进行切换。 Fork/Joi...

不积跬步无以至千里 412

FPGA实现PID算法

PID 控制器表达式如下(引用某硕士论文 《基于FPGA的PID控制器研究与实现》): 其中,Kp为比例增益,Ti为积分时间常数,Td为微分时间常数,u(t)为控制量,e(t)为偏差。 在数字控制系统中,PID控制规律的实现必须用数值逼近的方法。当采样周期相当短时,用求和代替积分、用后向差分代替微分,使模拟PID离散化变为差分方程。 本文使用并行结构来实现。具有延时小,计算速度快的特点,但需要资源比较多。 利用图3.2所示并行结构实现方法 ,进一步将3.8式分解: ...

nxin168的博客 1万+

java8新特性之新时间日期API

1.使用 LocalDate、 LocalTime、 LocalDateTime LocalDate、 LocalTime、 LocalDateTime 类的实例是不可变的对象,分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的日期或时间,并不包含当前的时间信息。也不包含与时区相关的信息。 2.Instant时间戳 用于时间戳的运算。它是以Unix元年(传统的设定为UTC时区1970年1月1日午夜时分)开始所经历的描述进行运算。 3.Duration 和 Period Du

qq_41984117的博客 201

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java8新特性(三)新时间日期API

一.LocalDate,LocalTime,LocalDateTime LocalDate,LocalTime,LocalDateTime类的实例是不可变的对象,分别表示使用ISO-8601日历系统的日期,时间,日期和时间 他们提供了简单的日期或时间,并不包含前面的时间信息。也不包含与时区相关的信息。 注:ISO-8601日历系统是国际标准化组织制定的现代公民的日期和时间的表示法 ...

无名小辈 742

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

06-Java8新特性 新时间日期API

传统时间格式化的线程安全问题 测试线程安全问题 新建测试类 package com.dance.java8.day01.date; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.c...

彼岸舞的博客 225

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java 1.8新出的日期_Java 8 新特性之新的时间日期 API

1. 概述1.1 简介Java 8 引入了一套全新的时间日期API,操作起来更简便。简单介绍下,LocalDate和LocalTime和LocalDateTime的使用;java.util.Date月份从0开始,java.time.LocalDate月份从1开始并且提供了枚举。java.util.Date和SimpleDateFormatter都不是线程安全的,而LocalDate和LocalTi...

weixin_42364539的博客 220

Java8 新特性之 新时间日期 API

Java 8 时间和日期

qq_38777021的博客 716

Java8新特性【函数式编程API、新时间日期处理API、Optional容器类】总结

文章目录1、Lambda表达式1.1什么是Lambda表达式1.2从匿名类到 Lambda 的转换1.3Lambda表达式语法2、函数式接口2.1什么是函数式接口2.2自定义函数式接口2.3内置核心函数式接口2.4接口中常用的默认方法3、方法引用与构造器引用3.1 推荐用法3.2 基本格式3.3 语法详解(了解)3.3.1引用类的静态方法3.3.2 引用对象的实例方法3.3.4 引用类的实例方法3.3.5 构造器引用4、Stream API4.1什么是Stream4.2Stream操作的三个步骤4.2.1创

欢迎来到编程小栈 1534

JAVA8新特性[第六季]-新时间日期 API

一 使用 LocalDateLocalTimeLocalDateTime 1 案例 二 Instant 时间戳 1 案例 三Duration 和 Period 案例 四日期的操作 1 案例 五解析与格式化 1 案例 六 时区的处理 1 案例 一、 使用 LocalDate、LocalTime、LocalDateTime LocalDate、LocalTi...

幸运的天才小驴的专栏 1060

java解析odt_java8新特性学习六(新时间日期API)

在java8以前,做有关时间日期的操作时使用java.util.Date,做日期、月份、天数相加减操作时使用java.util.Calendar,对时间日期进行格式化操作时,使用SimpleDateFormat或DateFormat下的其他子类;但是这些时间日期操作对象,都是可变的、线程不安全的。java8出的新的时间日期java.timeAPI都是线程安全的,并且性能更好,代码更简洁!ZoneI...

weixin_32918953的博客 345

java 8 新特性 Lambda stream optional 并行流与Fork/Join框架 新时间日期api

第一次发帖,大佬勿喷,若有不对之处欢迎指出,这些自己在以前学习过程中整理出来的,在工作中也非常实用,希望能帮助一些像我一样刚毕业不久的小伙伴。需要源码联系qq:1352057131 得之在俄顷,积之在平日。 Java8新特性 lambda表达式 1、Lambda表达式的基础语法 Java8中引入了一个新的操作符“->”该操作符称为箭头操作符或Lambda操作符,箭头操作符将Lambda表...

努力爬行的小蜗牛的博客 719

Java8新特性(四)-新时间日期API

1,LocalDate、 LocalTime、 LocalDateTime   LocalDate、 LocalTime、 LocalDateTime 类的实 例是不可变的对象,分别表示使用 ISO-8601日 历系统的日期、时间、日期和时间。它们提供 了简单的日期或时间,并不包含当前的时间信 息。也不包含与时区相关的信息。 2,Instant 时间戳    用于“时间戳”的运算。它是以...

空默寒的博客-学习和积累 412

Java8新特性(三)——Optional类、接口方法与新时间日期API

一、Optional容器类   这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。     查看结构图可以看到有如下常用方法:     of(T)——创建一个非空的Optional实例(使用empty创建一个空的Optional实例)     ofNullable(T)——若参数不为Null,则创建一个非空实例,...

weixin_30633507的博客 166
上一篇: Java8新特性——其它
下一篇: 学习笔记:JavaEE开发的颠覆者SpringBoot实战(七)数据访问
夜未眠shm
博客等级 码龄14年 15粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值