Java中有哪些可以用于日期和时间的API?

news2024/11/27 17:41:42

从Java 8开始,java.time包提供了新的日期和时间API,新增的API严格区分了时刻、本地日期、本地时间,并且,对日期和时间进行运算更加方便。主要涉及的类型有以下几类:

LocalDate:不包含具体时间的日期。

LocalTime:不含日期的时间。

LocalDateTime:包含了日期及时间。

Instant:代表的是时间戳。

DateTimeFormatter 用于做时间的格式化和解析的

Duration:用于计算两个“时间”间隔

Period:用于计算两个“日期”间隔

新API的类型几乎全部是不变类型(和String的使用类似),可以放心使用不必担心被修改。其中LocalDate、LocalTime、LocalDateTime,分别表示日期,时间,日期时间对象,他们的类的实例是不可变的对象。他们三者构建对象和API都是通用的。

构建对象的方式如下:

构建对象

LocalDate、LocalTime、LocalDateTime获取信息的API。

LocalDateTime获取信息的API

修改相关的API

LocalDateTime 综合了 LocalDate 和 LocalTime 里面的方法,所以下面只用 LocalDate 和 LocalTime 来举例。这些方法返回的是一个新的实例引用,因为LocalDateTime 、LocalDate 、LocalTime 都是不可变的。

修改api

Instant时间戳

JDK8获取时间戳特别简单,且功能更丰富。Instant类由一个静态的工厂方法now()可以返回当前时间戳。

Instant instant = Instant.now();
System.out.println("当前时间戳是:" + instant);

Date date = Date.from(instant);
System.out.println("当前时间戳是:" + date);

instant = date.toInstant();
System.out.println(instant);

时间戳是包含日期和时间的,与java.util.Date很类似,事实上Instant就是类似JDK8 以前的Date。Instant和Date这两个类可以进行转换。

DateTimeFormatter

在JDK8中,引入了一个全新的日期与时间格式器DateTimeFormatter。正反都能调用format方法。

LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);//2021-03-01T15:09:17.444190900

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String ldtStr = ldt.format(dtf);
System.out.println(ldtStr);//2021-03-01 15:09:17

String ldtStr1 = dtf.format(ldt);
System.out.println(ldtStr1);//2021-03-01 15:09:17

Period

在Java8中,我们可以使用以下类来计算日期间隔差异:java.time.Period。主要是 Period 类方法 getYears(),getMonths() 和 getDays() 来计算,只能精确到年月日。用于 LocalDate 之间的比较。

LocalDate today = LocalDate.now();
System.out.println(today);     // 2021-03-01
LocalDate birthDate = LocalDate.of(1995, 1, 11);
System.out.println(birthDate); // 1995-01-11
Period period = Period.between(birthDate, today);
System.out.printf("年龄 : %d 年 %d 月 %d 日", period.getYears(), period.getMonths(),
 period.getDays());

Duration

在Java8中,我们可以使用以下类来计算时间间隔差异:java.time.Duration,基于时间的值,测量时间量的方法。用于 LocalDateTime 之间的比较。也可用于 Instant 之间的比较。

LocalDateTime today = LocalDateTime.now();
System.out.println(today);
LocalDateTime birthDate = LocalDateTime.of(1990,10,1,10,50,30);
System.out.println(birthDate);

Duration duration = Duration.between(birthDate, today);//第二个参数减第一个参数
System.out.println(duration.toDays());//两个时间差的天数
System.out.println(duration.toHours());//两个时间差的小时数
System.out.println(duration.toMinutes());//两个时间差的分钟数
System.out.println(duration.toMillis());//两个时间差的毫秒数
System.out.println(duration.toNanos());//两个时间差的纳秒数

Duration用于计算两个“时间”间隔。 Period用于计算两个“日期”间隔。

Java.time.temporal.ChronoUnit

ChronoUnit类可用于在单个时间单位内测量一段时间,这个工具类是最全的了,可以用于比较所有的时间单位。

LocalDateTime today = LocalDateTime.now(); 
System.out.println(today); 
LocalDateTime birthDate = LocalDateTime.of(1990,10,1,10,50,30); 
System.out.println(birthDate); 

System.out.println("相差的年数:" + ChronoUnit.YEARS.between(birthDate, today)); 
System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(birthDate, today)); 
System.out.println("相差的周数:" + ChronoUnit.WEEKS.between(birthDate, today)); 
System.out.println("相差的天数:" + ChronoUnit.DAYS.between(birthDate, today)); 
System.out.println("相差的时数:" + ChronoUnit.HOURS.between(birthDate, today)); 
System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(birthDate, today)); 
System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(birthDate, today)); 
System.out.println("相差的毫秒数:" + ChronoUnit.MILLIS.between(birthDate, today)); 
System.out.println("相差的微秒数:" + ChronoUnit.MICROS.between(birthDate, today)); 
System.out.println("相差的纳秒数:" + ChronoUnit.NANOS.between(birthDate, today)); 

System.out.println("相差的半天数:" + ChronoUnit.HALF_DAYS.between(birthDate, today)); 
System.out.println("相差的十年数:" + ChronoUnit.DECADES.between(birthDate, today)); 
System.out.println("相差的世纪(百年)数:" + ChronoUnit.CENTURIES.between(birthDate, today)); 
System.out.println("相差的千年数:" + ChronoUnit.MILLENNIA.between(birthDate, today)); 
System.out.println("相差的纪元数:" + ChronoUnit.ERAS.between(birthDate, today));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/847397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gRPC中interceptor拦截器的总结和实践

一、使用场景 gRPC中的interceptor拦截器分为客户端拦截器和服务端拦截器,分别是在客户端和服务端的请求被发送出去之前进行处理的逻辑。常见的使用场景有:(1)请求日志记录及监控;(2)添加请求头…

C++初阶语法——引用,从此和指针说byebye

前言:相信学过C语言的同学肯定被指针深深折磨过,从一级指针到二级指针,数组指针,函数指针等等,可谓是谈针色变。而在C中,使用引用代替了指针的使用,大大降低了我们学习的难度。 引用 一.什么是…

阿里云二级域名配置

阿里云二级域名配置 首先需要进入阿里云控制台的域名管理 1.选择域名点击解析 2.添加记录 3.选择A类型 4.主机记录设置【可以aa.bb或者aa.bb.cc】 到时候会变成:aa.bb.***.com 5.解析请求来源设置为默认 6.记录值 设置为要解析的服务器的ip地址 7.TTL 默认即…

知网行政部门主管_《天津教育》投稿指南

知网行政部门主管_《天津教育》投稿指南 一、《天津教育》期刊简介: 主管单位:天津市教育委员会 主办单位:天津教育报刊社 国际标准刊号ISSN:0493-2099 国内统一刊号CN:12-1044/G4 邮发代号6-9 出版周期:旬刊 出版地&…

Linux usb设备固定端口号

Linux usb设备固定端口号 一:/sys/bus/usb/devices/二:设备信息三:固定usb设备名方法 一:/sys/bus/usb/devices/ 信息显示如下 1-0:1.0 1:表示 1 号总线,或者说 1 号 Root Hub0:表示端口号1:表示配置号0:表示接口号命…

【FeatureBooster】Boosting Feature Descriptors with a Lightweight Neural Network

这篇论文介绍了一种轻量级网络,用于改进同一图像中关键点的特征描述符。该网络以原始描述符和关键点的几何属性作为输入,使用基于多层感知器(MLP)的自我增强阶段和基于Transformer的交叉增强阶段来增强描述符。增强后的描述符可以…

搭建Repo服务器

1 安装repo 参考&#xff1a;清华大学开源软件镜像站:Git Repo 镜像使用帮助 2 创建manifest仓库 2.1 创建仓库 git init --bare manifest.git2.2 创建default.xml文件 default.xml文件内容&#xff1a; <?xml version"1.0" encoding"UTF-8" ?…

java之junit Test

JUnit测试简介 1.什么是单元测试 单元测试是针对最小的功能单元编写测试代码Java程序最小的功能单元是方法单元测试就是针对单个Java方法的测试 2.测试驱动开发 3.单元测试的好处 确保单个方法运行正常如果修改了方法代码&#xff0c;只需确保其对应的单元测试通过测试代码…

QtCreator5.15.2新建工程没有pro文件

Qt系列文章目录 文章目录 Qt系列文章目录前言一、解决办法参考 前言 最近新安装了Qt5.15.2版本&#xff0c;使用她创建新工程发现居然没有pro工程文件&#xff0c;取而代之的是CMakeLists.txt&#xff0c;文件里面的代码几乎看不懂&#xff0c;不知道如何在CMakeLists.txt加入…

CentOS虚拟机 NAT模式连网

1、查看本地VMnet8的网络信息 cmd ipconfig2、编辑VMware虚拟网络编辑器 &#xff08;1&#xff09;打开网络编辑器 &#xff08;2&#xff09;打开NET设置 &#xff08;3&#xff09;修改网络配置 修改子网ip和windows查到的ip的最后一位不一样就行和子网掩码照抄 3、在VMw…

P1993 小 K 的农场(差分约束)(内附封面)

小 K 的农场 题目描述 小 K 在 MC 里面建立很多很多的农场&#xff0c;总共 n n n 个&#xff0c;以至于他自己都忘记了每个农场中种植作物的具体数量了&#xff0c;他只记得一些含糊的信息&#xff08;共 m m m 个&#xff09;&#xff0c;以下列三种形式描述&#xff1a;…

SRV6 BE

实验目的:通过SRV6 BE实现CE之间的ipv4网络互访 步骤1&#xff1a;配置ISP网络设备的ipv6地址 步骤2&#xff1a;配置ISP网络的IGP协议&#xff08;ISIS ipv6&#xff09;设备配置前先在每台设备上面 undo dcn PE1: isis 1cost-style widenetwork-entity 49.0001.0000.0000…

Substack 如何在去中心化内容创作领域掀起波澜

面对数字内容广告化的困境&#xff0c;Substack回归做内容的初心&#xff0c;通过产品和平台双轮驱动&#xff0c;重塑一个去中心化的多元文化内容聚集地&#xff0c;实现了增长突破。其核心策略在于先使用简洁的创作工具赋能内容生产&#xff0c;进而通过平台的互动机制促进用…

【Python基础教程】super()函数的正确使用方法

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 1.super(本身类名,self).方法名(参数)这样就可以调用父类的方法和参数了,super()内也可不加参数 2.规律是super是按调用的次序执行&#xff0c;super后面的语句是逆向执行的。 有2段示例代码&#xff0c;不同的在于value有没…

高忆管理:股票成交量怎么看?

股票成交量是衡量股票商场生意活泼度的重要目标之一。通过调查股票成交量的巨细和改变趋势&#xff0c;能够帮助出资者更好地了解商场状况和出资方向&#xff0c;从而做出更正确的出资决策。那么&#xff0c;股票成交量怎么看&#xff1f;本文将从多个视点为您剖析。 一、股票成…

ZyjDataLink 全量MySQL同步程序 - 开发过程 01

开发过程由本人从 架构设计 到 代码实现 独立完成&#xff0c;通过该博客记录分享开发经验 ZyjDataLink 当前的目标是做到 MySQL大数据量的快速同步&#xff0c;后期希望扩展的功能 高度可操作性&#xff0c;融入增量数据库同步&#xff0c;跨数据库同步 ZyjDataLink 需求分析…

python数据分析报告 范文,python数据分析报告+代码

大家好&#xff0c;本文将围绕python数据分析期末大作业报告展开说明&#xff0c;python数据分析期末大作业是一个很多人都想弄明白的事情&#xff0c;想搞清楚python数据分析报告怎么写需要先了解以下几个事情。 背景 虽然用Python开发爬虫脚本&#xff0c;顺利把某房产网站的…

小学生作业随机加减乘除运算计算习题答案 html源码

小学生作业随机加减乘除运算计算习题答案 html源码 这道题目提供了多种选项,包括运算符和输入的运算数范围。题目数量也可以选择。如果你选择好了选项,就可以点击出题按钮进行练习。 为了方便,题目答案可以打印出来。但是,如果隐藏了横线,就会去除等号后面的下划线。推荐使用…

Java中实现图片和Base64的互相转化

文章目录 前言一、代码二、测试三、结果 前言 公司项目中用到了实名认证此&#xff0c;采用的第三方平台。后端中用到的单项功能为身份证信息人像对比功能&#xff0c;在写demo的过程中发现&#xff0c;它们所要求的图片信息为base64编码格式。 一、代码 package com.bajiao…

QGIS二次开发二:不重新编译QGIS进行二次开发

目录 一、下载OSGeo4W 二、配置VS 三、测试代码 四、补充&#xff1a;配置QT插件 五、导出项目为模板 六、Release模式的一个问题解决 由于重新编译QGIS对于初学者来说还是有一定难度&#xff0c;因此这里介绍另外一种不编译QGIS也能够二次开发的方法&#xff0c;不需要…