javaAPI(四):jdk8中的日期时间API
新日期时间API出现的背景
jdk8之前时间日期API
如果我们可以跟别人说:“我们在1502653933071见面,别晚了!”那么就再简单不过了。但是我们希望时间与昼夜和四季有关,于是事情就变复杂了。jdk 1.0中包含了一个java.util.Date类,但是它大多数方法已经在jdk 1.1引入Calendar类之后被弃用了。而Calendar并不比Date好多少。它们面临的问题是:
可变性:像日期和时间这样的类应该是不可变的。
偏移性:Date中的年份是从1900开始的,而月份都从0开始。
格式化:格式化只对Date有用,Calendar则不行。
此外,它们也不是线程安全的;不能处理闰秒等。
新时间日期API
java 8吸收了 joda-Time 的精华,以一个新的开始为java创建优秀的API。新的 java.time 中包含了所有关于本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration) 的类。历史悠久的 Date 类新增了 toInstant() 方法,用于把 Date 转换成新的表示形式。这些新增的本地化时间日期API大大简化了日期时间和本地化的管理。
注:
joda-Time提供了一组java类包用于处理包括ISO8601标准在内的date和time,可以利用它把jdk Date和Calendar类完全替换掉,而且仍然能够提供很好的集成,目前joda-Time已经纳入 jdk 8 的官方API了。
LocalDate,LocalTIme,LocalDateTime
1、LocalDateTime相较于LocalDate、localTime,使用频率要高
2、类似于Calendar
//now():获取当前日期、时间、日期+时间 -----------实例化方式一LocalDate localDate = LocalDate.now();LocalTime localTime = LocalTime.now();LocalDateTime localDateTime = LocalDateTime.now();System.out.println(localDate);//2020-04-14System.out.println(localTime);//15:31:53.209System.out.println(localDateTime);//2020-04-14T15:31:53.209//Of():设置指定的年月日时分秒,是没有偏移量的 -----------实例化方式二LocalDateTime localDateTime1 = LocalDateTime.of(2012, 2, 2, 13, 14);System.out.println(localDateTime1);//2012-02-02T13:14//getXxx():获取相关属性System.out.println(localDateTime1.getDayOfMonth());//2System.out.println(localDateTime1.getDayOfWeek());//THURSDAYSystem.out.println(localDateTime1.getMonth());//FEBRUARYSystem.out.println(localDateTime1.getMinute());//14//体现不可变性//WithXxx():设置相关属性LocalDateTime localDateTime2 = localDateTime1.withDayOfMonth(15);System.out.println(localDateTime1);//2012-02-02T13:14System.out.println(localDateTime2);//2012-02-15T13:14LocalDateTime localDateTime3 = localDateTime1.withMinute(50);System.out.println(localDateTime3);//2012-02-02T13:50//plusXxx():加LocalDateTime localDateTime4 = localDateTime1.plusMonths(5);System.out.println(localDateTime1);//2012-02-02T13:14System.out.println(localDateTime4);//2012-07-02T13:14//minusXxx():减LocalDateTime localDateTime5 = localDateTime1.minusDays(1);System.out.println(localDateTime1);//2012-02-02T13:14System.out.println(localDateTime5);//2012-02-01T13:14
瞬时:Instant(类似于java.util.Date)
Instant:时间线上的一个瞬时点。这可能被用来记录应用程序中的事件时间戳。
在处理时间和日期的时候,我们通常会想到年,月,日,时,分,秒。然而,这只是时间的一个模型,是面向人类的。第二种通用模型是面向机器的,或者说是连续的。在此模型中,时间线中的一个点表示为一个很大的数,这有利于计算机处理。在UNIX中,这个数从1970年开始,以秒为单位:同样的,在java中,也是从1970年开始,但以毫秒为单位。
java.time包通过值类型Instant提供机器视图,不提供处理人类意义上的时间单位。Instant表示时间线上的一点,而不需要任何上下文信息,例如,时区。概念上讲,它只是简单的表示自1970年1月1日0时0分0秒(UTC)开始的秒数。因为java.time包是基于纳秒计算的,所以Instant的精度可以达到纳秒级。
public void test2(){//now():获取本初子午线对应的时间标准Instant instant = Instant.now();System.out.println(instant);//2020-04-14T13:02:26.572Z 这个时间是本初子午线的时间,与我们使用的不同,需要添加偏移量//添加时间偏移量OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));System.out.println(offsetDateTime);//2020-04-14T21:04:54.992+08:00//toEpochMilli():获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数 ---->Date类的getTime()long l = instant.toEpochMilli();System.out.println(l);//1586869726432//ofEpochMilli():通过给定的毫秒数,获取Instant --->Date(long millis)Instant instant1 = Instant.ofEpochMilli(1586869726432L);System.out.println(instant1);}
DateTimeFormatter:格式化与解析日期或时间
public void test3(){//方式一:不常用// 预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIMEDateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;//格式化:日期-->字符串LocalDateTime localDateTime = LocalDateTime.now();String str1 = formatter.format(localDateTime);System.out.println(localDateTime);//2020-04-14T21:24:58.608System.out.println(str1);//2020-04-14T21:24:58.608//解析:字符串 -->日期TemporalAccessor parse = formatter.parse("2020-04-14T21:24:58.608");System.out.println(parse);//方式二:不常用//本地化相关的格式。如:ofLocalizedDateTime()//FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT :适用于LocalDateTimeDateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);//格式化String str2 = formatter1.format(localDateTime);System.out.println(str2);//2020年4月14日 下午09时32分27秒//本地化相关的格式。如:ofLocalizedDate()// FormatStyle.FULL / FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT :适用于LocalDateTimeDateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);String str3 = formatter2.format(LocalDate.now());System.out.println(str3);//2020年4月14日 星期二//方式三:常用// 自定义的格式。如:ofPattern("yyyy-MM-dd hh:mm:ss E")DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");//格式化String str4 = formatter3.format(LocalDateTime.now());System.out.println(str4);//2020-04-14 09:38:41//解析TemporalAccessor accessor = formatter3.parse("2020-04-14 09:38:41");System.out.println(accessor);//{MicroOfSecond=0, MilliOfSecond=0, SecondOfMinute=41, HourOfAmPm=9, MinuteOfHour=38, NanoOfSecond=0},ISO resolved to 2020-04-14}
其他时间API
还有很多
相关文章:
javaAPI(四):jdk8中的日期时间API
新日期时间API出现的背景 jdk8之前时间日期API 如果我们可以跟别人说:“我们在1502653933071见面,别晚了!”那么就再简单不过了。但是我们希望时间与昼夜和四季有关,于是事情就变复杂了。jdk 1.0中包含了一个java.util.Date类&am…...
解决在mybatis中出现的org.apache.ibatis.exceptions.PersistenceException~
我在使用mybatis中的注解对数据库中的信息进行操作时,出现了下述错误 我在mapper接口中定义了该方法,并且使用注解绑定了对应的SQL语句 //增加用户信息 Insert("insert into user values(#{id},#{name},#{password})") int addUser(user user…...
Vue + ElementUI 实现可编辑表格及校验
效果 完整代码见文末 实现思路 使用两个表单分别用于实现修改和新增处理。 通过一个editIndex变量判断是否是编辑状态来决定是否展示输入框,当点击指定行的修改后进行设置即可: <el-table-columnv-for"(column, index) in columns":key&qu…...
中介者模式——协调多个对象之间的交互
1、简介 1.1、概述 如果在一个系统中对象之间的联系呈现为网状结构,如下图所示: 对象之间存在大量的多对多联系,将导致系统非常复杂,这些对象既会影响别的对象,也会被别的对象所影响,这些对象称为同事对…...
启动Flink显示初始化状态怎么解决?
启动Flink显示初始化状态怎么解决? Flink On Yarn模式 问题 flnk任务在跑的过程中, 有时候任务停掉了 ,不过我有 定时任务,可以把失败的flink任务拉起来,但是因为最新的checkpoint做失败了,导致脚本无法拉…...
VB+SQL采购管理系统设计与实现
摘 要 本系统是基于为轴承企业采购部门开发的系统。课题主要采用自上而下的结构化程序设计方法与面向对象方法相结合的方法,致力于达到标准的现代化物流管理要求。帮助轴承企业采购部门全面实现电子化、自动化、标准化的现代化先进管理模式。 该系统使用Visualbasic.net编程…...
TBB库中实现协程(coroutine)的源码说明
源码请见: https://github.com/oneapi-src/oneTBB/blob/master/src/tbb/co_context.h 在windows系统,TBB(也就是intel 的 oneTBB库),通过windwos fiber(纤程)来实现协程(coroutine)。 创建一个协程,代码很简洁: inline void create_coroutine(corouti…...
【CSS弹性盒模型 display:flex;常用参数及常见的布局】
CSS弹性盒模型 display:flex;常用参数flex-directionjustify-contentalign-itemsflex-wrapflex-flowalign-contentorderflex-growflex-shrinkflex-basis 常见的布局1. 水平居中2. 垂直居中3. 水平垂直居中4. 等分布局5. 响应式布局6. 网格布局 常见的布局封装 display:flex;常用…...
golang函数传参——值传递理解
做了五年的go开发,却并没有什么成长,都停留在了业务层面了。一直以为golang中函数传参,如果传的是引用类型,则是以引用传递,造成这样的误解,实在也不能怪我。我们来看一个例子,众所周知…...
Liunx环境下git的详细使用(gitee版)
Liunx环境下git的详细使用(gitee版) 1.git是什么2.git操作2.1在gitee创建一个仓库2.2.gitignore2.3.git 3.git三板斧3.1add3.2 commit3.3push 4.git其他命令4.1查看当前仓库状态4.2查看提交日志4.3修改git里面文件名称4.4删除文件4.5修改远端仓库内容 1.…...
exoplayer的使用-2,与flutter相互通信
上一次解决的问题是ac3这些exoplayer本身不支持音频,添加了ffmpeg扩展实现软解码. 另一个问题是flutter端的内置字幕显示不了,也不打算再继续探讨了,换成native实现播放器.由于主项目是flutter的,所以涉及到了相互通信. 当前文章主要涉及到flutter与native相互通信功能 通信有…...
【基础类】—类型转换
一、数据类型 原始类型 Boolean、Null、Undefined、Number、String、Symbol 对象 Object 二、显示类型转换 Number函数, Number(param) 1-1. param 是 原始类型 时 数值:转换后还是原来的值 字符串:如果可以被解析…...
【云原生】 一文了解docker中的网络
文章目录 1.在Docker中,网络的实现方式是通过使用不同的网络驱动程序来实现的。2.桥接网络是默认网络。3.主机网络模式是不使用网络隔离的一种特殊模式。4.另一个有用的网络驱动程序是覆盖网络。5.最后,MACVLAN网络驱动程序允许多个容器与宿主机网卡的单独MAC地址和IP地址之间…...
嵌入式开发学习(STC51-15-红外遥控)
内容 使用外部中断功能,使按下红外遥控器,将对应键值编码数据解码后通过数码管显示 红外遥控介绍 红外线简介 人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫; 其中红光的波长范围为 0.62&…...
代码编辑器实践之vue-codemirror使用
前言 程序员用到IDE次数比较频繁,比如vscode、idea等,这些都是市场上比较流行的代码编辑器,拥有非常全面的功能。但是有时候在项目开发上也会用到代码编辑器,比如复杂的Array<Object>输入,或者需要用到用户交互…...
Mapstruct
1. Mapstruct介绍 1. 实体类之间对象映射中间件 2. 实体类相同结构属性自动对象映射 3. 实体类不同结构属性可以手动配置对象映射 2. Mapstruct基本使用 1. 定义一个接口或抽象类加Mapper(componentModel “spring”);spring:可以spring框架注入 2. 定义…...
初阶C语言——特别详细地介绍函数
系列文章目录 第一章 “C“浒传——初识C语言(更适合初学者体质哦!) 第二章 详细认识分支语句和循环语句以及他们的易错点 第三章 初阶C语言——特别详细地介绍函数 目录 系列文章目录 前言 一、函数是个什么鬼东西? 二、C语…...
pulsar-client-1-2 PulsarClient构造函数
前言 上文说到,PulsarClient通过链式调用构建,而在build()中调用了new PulsarClientImpl(conf),而Producer 本文通过解析构造函数,了解其主要结构。 // 创建PulsarClient PulsarClient client = PulsarClient.builder().serviceUrl("pulsar://localhost:6650")…...
原型链污染是什么
__proto__ 一个Foo类实例化出来的foo对象,可以通过foo.__proto__属性来访问Foo类的原型,也就是说: foo.__proto__ Foo.prototype 对象 构造函数 所以,总结一下: prototype是一个类的属性,所有…...
java之石头迷阵单击游戏、继承、接口、窗体、事件、组件、按钮、图片
文章目录 前言主方法实现类 前言 主方法和实现类在同一个包中。 主方法 package PSortGames;public class Main {public static void main(String[] args) {new MainFrame();} }实现类 package PSortGames;import javax.swing.*; import java.awt.event.KeyEvent; import jav…...
悟空率先接入国产最强编程模型Qwen3.6-Plus
4月2日,阿里巴巴正式发布新一代大语言模型Qwen3.6-Plus,阿里在企业级市场的旗舰AI应用悟空率先完成接入。Qwen3.6-Plus在代码、智能体、推理、原生多模态等能力上整体性能大幅增强,在智能体编程SWE-bench系列评测、真实世界智能体任务Claw-Ev…...
告别烧脑报文!用ESP8266+51单片机零基础玩转OneNet MQTT(附报文生成工具)
从零到一:ESP8266与51单片机轻松对接OneNet MQTT全指南 当你第一次听说MQTT协议时,是否被那些晦涩的十六进制报文吓退?作为物联网领域最流行的轻量级通信协议,MQTT本应让设备间的对话变得简单,但传统教程中复杂的报文…...
别再纠结FP32了!手把手教你用PyTorch的BF16和FP16加速大模型训练(附完整代码)
突破显存瓶颈:PyTorch混合精度训练实战指南 当你在深夜盯着屏幕上那个"CUDA out of memory"的错误提示时,是否感到一阵无力?大模型训练就像是在走钢丝——一边是宝贵的显存资源,另一边是模型性能的悬崖。作为一名经历过…...
百度智能云千帆AppBuilder API调用全攻略:从密钥获取到实战代码示例
百度智能云千帆AppBuilder API深度集成指南:从密钥管理到高效调用实践 在人工智能应用开发领域,快速集成可靠的AI能力已成为开发者提升效率的关键。百度智能云千帆AppBuilder作为一站式AI原生应用开发平台,其API接口的灵活调用能力让开发者能…...
Linux平台微信小程序开发终极指南:免费搭建完整开发环境
Linux平台微信小程序开发终极指南:免费搭建完整开发环境 【免费下载链接】wechat-web-devtools-linux 适用于微信小程序的微信开发者工具 Linux移植版 项目地址: https://gitcode.com/gh_mirrors/we/wechat-web-devtools-linux 在Linux系统上进行微信小程序开…...
让机器人学会思考:利用快马平台AI模型生成openclaw智能抓取决策代码
让机器人学会思考:利用快马平台AI模型生成openclaw智能抓取决策代码 最近在研究机器人抓取技术时,发现传统机械臂编程需要手动设定每个动作参数,效率很低。于是尝试用AI来辅助openclaw实现智能抓取,整个过程在InsCode(快马)平台上…...
FanControl完全攻略:智能风扇控制的动态平衡技术与多场景应用
FanControl完全攻略:智能风扇控制的动态平衡技术与多场景应用 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tren…...
星露谷跨地域联机实战:基于FRP的低成本内网穿透方案
1. 为什么需要FRP内网穿透玩星露谷 星露谷物语作为一款支持多人联机的农场模拟游戏,和朋友一起种田钓鱼挖矿的乐趣远胜单人游玩。但官方服务器对国内玩家并不友好,经常出现高延迟甚至连接失败的情况。更头疼的是,当你想和异地好友联机时&…...
高速ADC采样时钟不准?手把手教你理解时钟占空比校正(DCC)电路的核心原理
高速ADC采样时钟不准?手把手教你理解时钟占空比校正(DCC)电路的核心原理 当你在调试一块高速ADC板卡时,发现ENOB(有效位数)始终比规格书低2-3位,频谱分析显示谐波失真异常。这种困扰可能来自一…...
阿里云代理商:OpenClaw 技能安全部署指南与高口碑扩展精选
在集成任何 OpenClaw 第三方功能模块前,安全防护是首要环节。核心流程是借助官方安全审查工具,预先扫描潜在威胁,避免因加载恶意模块引发的数据泄漏或设备隐患。1. 核心安防工具部署优先部署 skill-vetting 安全扫描工具(OpenClaw…...
