java中的日期类

1.1 第一代日期类

第一代日期时间API主要有java.util.Date和日期时间格式化有关的java.text.DateFormat及其子类。

1.1.1 Date类

JDK1.0就在java.util包下面提供了Date类用于表示特定的瞬间,可以精确到毫秒。
  通过API或源码,可以看出Date类的大部分方法已经过时,已被第二代日期类Calendar代替,剩下的Date类常见方法如下所示。

序号方法定义
1Date()返回一个代表当前系统时间的Date对象,精确到毫秒
2Date(long date)返回一个距离UTC时间date毫秒的新日期对象,精确到毫秒
3int compareTo(Date anotherDate)比较两个日期的大小
4long getTime()返回自1970年1月1日00:00:00 GMT以来此Date对象表示的毫秒数
5String toString()把此Date对象转换为以下形式的String:dow mon dd hh:mm:ss zzz yyyy其中:dow是一周中的某一天(Sun,Mon,Tue,Wed,Thu,Fri,Sat)
public class DateTest {public static void main(String[] args) {Date date = new Date();System.out.println("现在的系统时间是:"+date);long time=date.getTime();System.out.println("当前时间距离UTC时间的毫秒数:"+time);}
}>>
现在的系统时间是:Thu Mar 14 15:40:17 CST 2024
当前时间距离UTC时间的毫秒数:1710402017697

1.1.2 SimpleDateFormat类

Date类显示的格式没有考虑国际化问题,如该格式不符合中国人查看时间的格式习惯,因此需要对其进行格式化操作。java.text.SimpleDateFormat类可以实现格式化操作,它是java.text.DateFormat的子类。

创建SimpleDateFormat类的对象非常简单,可以使用如下构造器:

  • SimpleDateFormat():用默认的模式和默认的语言环境的日期格式符号构造SimpleDateFormat
  • SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat
  • SimpleDateFormat(String pattern,Locale locale):用给定的模式和给定语言环境的日期格式符号构造。

常见的日期格式化模板如下:在这里1图片描述
 SimpleDataFormat类主要用于将Date日期转换为字符串,或者将某个字符串转换为Date对象,其常见方法如下所示:

方法定义描述
format将一个Date格式转化为日期/时间字符串,此方法继承的父类DateFormat的方法
parse从给定字符串的开始解析文本,以生成一个日期,此方法为继承的父类DateFormat的方法
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class SimpleDateFormatTest {public static void main(String[] args) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH小时mm分钟ss秒S毫秒");System.out.println("使用指定格式的日期字符串:"+sdf.format(new Date()));String str="2021年1月15日 06小时44分钟05秒 123毫秒";Date date = sdf.parse(str);System.out.println("日期对象:"+date);}
}>>
使用指定格式的日期字符串:2024031415小时45分钟06915毫秒
日期对象:Fri Jan 15 06:44:05 CST 2021

1.2 第二代日期类Calendar

Date类用于返回日期对象,不适合获取日历字段。设置和获取日历字段的方法,被JDK1.1推出的Calendar代替。

java.util.Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期)提供了一些方法。

序号方法定义描述
1static getInstance()使用默认时区和语言环境获得一个日历,也可以通过getInstance(TimeZone time,Locale loc)或指定时区和语言环境的日历
2get(int field)获取指定的日历字段
3set(int year,int month,int date,int hourOfDay,int minute,int second)设置字段YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE和SECOND的值
public class CalendarTest {public static void main(String[] args) {Calendar c = Calendar.getInstance(TimeZone.getTimeZone("Asia/Shanghai"), Locale.CHINA);System.out.println("年:"+c.get(Calendar.YEAR));System.out.println("月:"+(c.get(Calendar.MONTH)+1));//1月从0开始System.out.println("日:"+c.get(Calendar.DAY_OF_MONTH));System.out.println("小时:"+c.get(Calendar.HOUR));System.out.println("分钟:"+c.get(Calendar.MINUTE));System.out.println("秒:"+c.get(Calendar.SECOND));}
}>>:2024
月:3:14
小时:4
分钟:0:28

上述代码中的TimeZone表示时区,Locale表示语言环境。例如TimeZone.getTimeZone(“Asia/Shanghai”)表示“亚洲/上海”时区,Locale.CHINA表示中国语言环境。

1.3 第三代日期类

java8中引入的java.time纠正了过去的缺陷,这就是第三代日期API。

java8吸收了Joda-Time的精华,以一个新的开始为Java创建优秀的API。新的java.time中包含了所有关于本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类。历史悠久的Date类也新增了toInstant()方法,用于把Date类转换成新的表示形式。

接下来只介绍商用的几个类型。

1.3.1 LocalDate、LocalTime、LocalDateTime类

这三个类都代表日期对象,只是包含的日历字段不同,相当于Calendar类的代替。
  java.time.LocalDate类:代表一个只包含年、月、日的日期对象,如2007-12-03。LocalDate类常见方法如下所示。

序号方法定义描述
1static LocalDate now()返回默认时区下的当前日期对象
2int getYear()返回年份,从-999999999-01-01~+999999999-12-31
3int getMonth()返回月份,1-12
4int getDayOfMonth()返回日期,1-31
5LocalDate parse(CharSequence text)按默认格式解析字符串为LocalDate的日期对象
6LocalDate parse(CharSequence text,DateTimeFormatter formatter)按指定格式解析字符串为LocalDate的日期对象

java.time.LocalTime类:代表一个只包含小时、分钟、秒的日期对象,如13:45.30.123456789。LocalTime常见方法如下:

序号方法定义描述
1static LocalTime now()返回默认时区下的当前时间对象
2int getHour()返回小时,0-23
3int getMinute()返回分钟,0-59
4int getSecond()返回秒,0-59
5LocalTime parse(CharSequence text)按默认格式解析字符串为LocalTime的日期对象
6LocalTime parse(CharSequence text,DateTimeFormatter formatter)按指定格式解析字符串为LocalTime的日期对象

java.time.LocalDateTime类:代表一个包含年、月、日、小时、分钟、秒的日期对象,如2007-12-03T10:15:30。LocalDateTime常见方法如下:

序号方法定义描述
1static LocalDateTime now()返回默认时区下的当前日期对象
2int getYear()返回年份,从-999999999-01-01~+999999999-12-31
3int getMonth()返回月份,1-12
4int getDayOfMonth()返回日期:1-31
5int getHour()返回小时:0-23
6int getMinute()返回分钟:0-59
7int getSecond()返回秒:0-59
8LocalDateTime parse(CharSequence text)按默认格式解析字符串为LocalDateTime的日期对象
9LocalDateTime parse(CharSequence text,DateTimeFormatter formatter)按指定格式解析字符串为LocalDateTime的日期对象
import java.time.LocalDateTime;public class LocalDateTimeTest {public static void main(String[] args) {//1、创建一个日期对象LocalDateTime now = LocalDateTime.now();//2、获取日历字段System.out.println("年:"+now.getYear());System.out.println("月:"+now.getMonthValue());System.out.println("月:"+now.getMonth());System.out.println("日:"+now.getDayOfMonth());System.out.println("小时:"+now.getHour());System.out.println("分钟:"+now.getMinute());System.out.println("秒:"+now.getSecond());}
}>>:2024:3
月:MARCH
日:14
小时:16
分钟:8
秒:10

1.3.2 Instant类

在处理时间和日期时,我们通常会想到年、月、日、时、分、秒。然而,这只是时间的一个模型,是面向人类的。第二种通用模型是面向计算机的,在此模型中,时间线中的一个点表示一个整数,这有利于计算机处理。在UNIX中这个数从1970年开始,以秒为单位;同样在Java中也是从1970年开始的,但以毫秒为单位。

java.time包通过值类型Instant提供机器视图,不提供人类意义上的时间单位。Instant类表示时间线商的一点,不需要要任何上下文信息。例如,时区。从概念上讲,它只是简单地表示自1970年1月1日0时0分0秒(UTC)开始地秒数。因为java.time包是基于纳秒计算的,所以Instant类的精度可以达到纳秒级。
 Instant类的常见方法如下:

序号方法定义描述
1static Instant now()静态方法,返回默认UTC时区的Instant类的对象
2static Instant ofEpochMillo(long epochMilli)静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象
3static OffsetDateTime atOffset(ZoneOffset offset)结合即时的便宜来创建一个OffsetDateTime
4long toEpochMilli()返回1970-01-01 00:00:00到当前时间的毫秒数,即时间戳

Instant类和第一代日期类Date的相互转换:

import java.time.Instant;
import java.util.Date;public class InstantTest {public static void main(String[] args) {//1、创建一个Instant对象Instant now = Instant.now();System.out.println("now="+now);//2、转换方法//[1]Instant->DateDate d = Date.from(now);System.out.println("d="+d);//[2]Date->InstantInstant instant = d.toInstant();System.out.println("instant="+instant);}
}>>
now=2024-03-14T08:15:44.544Z
d=Thu Mar 14 16:15:44 CST 2024
instant=2024-03-14T08:15:44.544Z

1.3.3 DateTimeFormatter
  java.time.format.DateTimeFormatter类提供了格式化日期的方法,这个类和第一代日期的SimpleDateFormatter类似,但SimpleDateFormat只能格式化Date类,对Calendar类无效。DateTimeFormatter可以格式化LocalDate、LocalTime、LocalDateTime及Instant类。
DateTimeFormatter类常见方法如下:

序号方法定义描述
1static DateTimeFormatter ofPattern(String pattern)静态方法,返回一个DateTimeFormatter对象
2String format(TemporalAccessor t)格式化一个日期、时间,返回字符串
3TemporalAccessor parse(CharSequence text)将指定格式的字符序列解析为一个日期、时间

TemporalAccessor 是java.time.temporal包下的接口,LocalDate、LocalTime、LocalDateTime、Instant都实现了该接口。

下面以LocalDateTime日期的格式为例,进行代码演示。

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class DateTimeFormatterTest {public static void main(String[] args) {LocalDateTime now = LocalDateTime.now();DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd a hh小时mm分钟ss秒");//格式化日期(日期->文本)String format = dtf.format(now);System.out.println(format);//解析字符串为日期(文本->日期)String s="2018-08-08 下午 05小时06分钟43秒";LocalDateTime parse = LocalDateTime.parse(s, dtf);System.out.println(parse);}
}>>
2024-03-14 下午 04小时18分钟202018-08-08T17:06:43

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

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

相关文章

vscode 导入前端项目

vscode 导入前端项目 导入安装依赖 运行 参考vscode 下载 导入 安装依赖 运行 在前端项目的终端中输入npm run serve

C#,数值计算,数据测试用的对称正定矩阵(Symmetric Positive Definite Matrix)的随机生成算法与源代码

C.Hermite 1、对称矩阵 对称矩阵(Symmetric Matrices)是指以主对角线为对称轴,各元素对应相等的矩阵。在线性代数中,对称矩阵是一个方形矩阵,其转置矩阵和自身相等。1855年,埃米特(C.Hermite,1822-1901年)证明了别的数学家发现的一些矩阵类的特征根的特殊性质,如称为埃…

ASPICE-SYSSWE

文章主要内容: Automotive SPICE 过程参考模型 SYS.1 需求挖掘 过程ID SYS.1 过程名称 需求挖掘 过程目的 需求挖掘过程的目的是:在产品和/或服务的整个生命周期内收集、处理和跟踪不断变化的利益相关方的需要和需求,从而建立一个需求基线&#x…

交换机/路由器的存储介质-思科

交换机/路由器的存储介质-思科 本文主要介绍网络设备的存储介质组成。 RAM(random-accessmemory,随机访问存储器) RAM中内容断电丢失,主要用于运行操作系统、运行配置文件、IP 路由表:、ARP 缓存、数据包缓存区。 ROM(read-only memory,只…

uniapp遇到的问题

【uniapp】小程序中input输入框的placeholder-class不生效解决办法 解决:写在scope外面 uniapp设置底部导航 引用:https://www.jianshu.com/p/738dd51a0162 【微信小程序】moveable-view / moveable-area的使用 https://blog.csdn.net/qq_36901092/…

持续创新引领计算机行业在数字经济时代的航向

受2024年政府工作报告的启发,计算机行业正站在新的发展十字路口。政府报告不仅为计算机行业的未来描绘了清晰的轮廓,更为行业的实践提供了扎实的政策支撑和发展空间。本文将深入分析计算机行业在数字化经济大潮中的新机遇与挑战,并对企业和从…

服务器数据恢复—raid5热备盘上线同步数据失败的如何恢复数据

服务器数据恢复环境&故障&分析: 一台存储上有一组由多块硬盘组建的raid5阵列,该raid5阵列中的一块硬盘掉线,热备盘自动上线同步数据的过程中,raid阵列中又有一块硬盘掉线,热备盘的数据同步被中断,r…

【刷题训练】LeetCode:557. 反转字符串中的单词 III

557. 反转字符串中的单词 III 题目要求 示例 1: 输入:s “Let’s take LeetCode contest” 输出:“s’teL ekat edoCteeL tsetnoc” 示例 2: 输入: s “Mr Ding” 输出:“rM gniD” 思路: 第一步&am…

Android studio 性能调试

一、概述 Android studio 的Profiler可用来分析cpu和memory问题,下来进行说明介绍。 二、Android studio CPU调试 从开发模拟器或设备中启动应用程序; 在 Android Studio 中,通过选择View > Tool Windows > Profiler启动分析器。 应…

Mac-自动操作 实现双击即可执行shell脚本

背景 在Mac上运行shell脚本,总是需要开启终端窗口执行,比较麻烦 方案 使用Mac上自带的“自动操作”程序,将shell脚本打包成可运行程序(.app后缀),实现双击打开即可执行shell脚本 实现细节 找到Mac上 应用程序中的 自动操作&am…

Selenium 学习(0.20)——软件测试之单元测试

我又(浪完)回来了…… 很久没有学习了,今天忙完终于想起来学习了。没有学习的这段时间,主要是请了两个事假(5工作日和10工作日)放了个年假(13天),然后就到现在了。 看了下…

【大模型系列】图片生成(DDPM/VAE/StableDiffusion/ControlNet/LoRA)

文章目录 1 DDPM(UC Berkeley, 2020)1.1 如何使用DDPM生成图片1.2 如何训练网络1.3 模型原理 2 VAE:Auto-Encoding Variational Bayes(2022,Kingma)2.1 如何利用VAE进行图像增广2.2 如何训练VAE网络2.3 VAE原理2.3.1 Auto-Encoder2.3.2 VAE编码器2.3.3 VAE解码器 3 …

【UE5】持枪状态站立移动的动画混合空间

项目资源文末百度网盘自取 创建角色在持枪状态站立移动的动画混合空间 在BlendSpace文件夹中单击右键选择动画(Animation)中的混合空间(Blend Space) 选择SK_Female_Skeleton 命名为BS_RifleStand 打开 水平轴表示角色的方向,命名为Direction,方…

CASIA-HWDB手写体数据集gnt生成为png格式

👑一、数据集获取 1.1 官方链接获取gnt文件 http://www.nlpr.ia.ac.cn/databases/download/feature_data/HWDB1.1trn_gnt.ziphttp://www.nlpr.ia.ac.cn/databases/download/feature_data/HWDB1.1tst_gnt.zip 1.2 百度网盘获取gnt文件 链接:https://pan.baidu.com/s/1pKa…

Redis 的并发竞争问题是什么?如何解决这个问题?了解 Redis 事务的 CAS 方案吗?

目录 一、面试官心理分析 二、面试题剖析 一、面试官心理分析 这个也是线上非常常见的一个问题,就是多客户端同时并发写一个key,可能本来应该先到的数据后到了,导致数据版本错了;或者是多客户端同时获取一个 key,修改值之后再写回…

KKVIEW: 远程控制软件哪个好用

远程控制软件哪个好用 随着科技的发展和工作方式的改变,远程控制软件越来越受到人们的关注和需求。无论是在家中远程办公,还是技术支持人员为远程用户提供帮助,选择一款高效稳定的远程控制软件至关重要。在众多选择中,有几款远程…

51-30 World Model | 自动驾驶的世界模型:综述

24年3月,澳门大学和夏威夷大学联合发布的工作,World Models for Autonomous Driving: An Initial Survey。花时间反复看了几遍,刚开始觉得世界模型没用,空洞无序,根本不可能部署到实车上,后面逐渐相信&…

idea 导入项目

idea 导入项目并运行 导入设置设置 jdk查看maven 设置 导入 在项目首页 或者 file 选择 open, 然后选择项目根路径 设置 设置 jdk 查看maven 设置

基于java实用的音乐软件微信小程序的设计与实现【附项目源码】分享

基于实用的音乐软件微信小程序的设计与实现: 源码地址:https://download.csdn.net/download/weixin_43894652/88842586 一、引言 随着移动互联网的普及和微信小程序的兴起,音乐类小程序成为了用户随时随地享受音乐的重要工具。本需求文档旨在详细阐述一…

c++简单使用

取消同步流是为了解决C有时遇到空格或回车&#xff08;不到\0&#xff09;就会停下的问题 #include<bits/stdc.h> using namespace std; int main() {//取消同步流ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int a, b;cin >> a>> b;cout << …