Java中的实用时间API

Java中的时间API有数种,如Date或LocalDateTime,笔者根据实际的开发经验,在这里罗列出一些常用并且尽可能通用的时间API操作,避免由于记忆过多无效API导致效率低下的问题

目录

LocalDateTime

LocalDateTime 与 String 的相互转换

Date

Date 与 String 的相互转换

Calendar


LocalDateTime

Java8引入了LocalDateTime(年月日时分秒)、LocalDate(年月日)和LocalTime(时分秒),LocalDate和LocalTime可以组合成LocalDateTime(即 年月日 和 时分秒 组装成 年月日时分秒 ),相关的API为

public static LocalDateTime of(LocalDate date, LocalTime time)

此外,LocalDateTime还能通过其他的 of() 方法获取,最常用的就是指定年月日时分秒获取LocalDateTime

public static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second)

如当前代码需要获取 2024-12-24 00:00:00 的LocalDateTime,方式如下

LocalDateTime localDateTime = LocalDateTime.of(2024, 12, 24, 0, 0, 0);

既然LocalDateTime可以通过 of() 方法获取,那么LocalDate和LocalTime按道理也可以用 of() 获取,实际情况也确实如此

可以通过指定年月日获取LocalDate

public static LocalDate of(int year, int month, int dayOfMonth)

也可以通过指定时分秒获取LocalTime

public static LocalTime of(int hour, int minute, int second)

在上面的例子中我们通过LocalDateTime的 of() 方法获取到 2024-12-24 00:00:00 ,下面我们将演示如何通过LocalDate和LocalTime获取到 2024-12-24 00:00:00 的LocalDateTime,方式如下

// 指定年月日
LocalDate localDate = LocalDate.of(2024, 12, 24);
// 指定时分秒
LocalTime localTime = LocalTime.of(0, 0, 0);
// 将 年月日 和 时分秒 组装成 年月日时分秒
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);

最后,介绍一下获取当前时间的LocalDateTime

LocalDateTime localDateTime = LocalDateTime.now();

LocalDateTime 与 String 的相互转换

String 转 LocalDateTime

将字符串类型转为时间类型,一定会涉及到字符串的解析,顾名思义,需要调用 parse() 方法

public static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter)

第一个参数填写需要解析的字符串,第二个参数填写解析器,用来解析第一个字符串,得到LocalDateTime。解析器通过下面这种方式获取

public static DateTimeFormatter ofPattern(String pattern)

pattern用来指明如何解析时间。比如我们现在需要将String类型的 "2024-12-24 23:59:59" 解析为 LocalDateTime 格式,方式如下

// 需要解析的字符串
String str = "2024-12-24 23:59:59";
// 根据字符串格式创建解析器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 将字符串解析为时间
LocalDateTime localDateTime = LocalDateTime.parse(str, formatter);

LocalDateTime 转 String

LocalDateTime可以格式化为字符串类型,方法为 format() 

public String format(DateTimeFormatter formatter)

这个DateTimeFormatter就是上面例子中的解析器,因此在上面例子的基础上,我们可以将LocalDateTime再转回String,只不过这次我们需要的时间格式是 "yyyy/MM/dd HH:mm:ss" ,方式如下

// 上面例子的字符串转时间
String str = "2024-12-24 23:59:59";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse(str, formatter);// 设置格式化器,指定时间格式为 yyyy/MM/dd HH:mm:ss
DateTimeFormatter LocalDateTime2StringFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
// 通过格式化器将 LocalDateTime 解析为 String
String format = localDateTime.format(LocalDateTime2StringFormatter);

总结:LocalDateTime和String进行互相转换时,都需要DateTimeFormatter参与,DateTimeFormatter通过ofPattern()获取

Date

Date也可以通过指定年月日时分秒的方式创建,但是这种方式已经废弃了,目前会采用Calendar的方式获取Date,Calendar将在下文介绍。在这里仅介绍一下获取当前时间的Date

Date date = new Date();

Date 与 String 的相互转换

上面我们通过一个解析器,完成了LocalDateTime和String的互相转换,这里能否举一反三,也通过一个解析器完成Date和String之间的转换呢?答案是可以的。在Date相关的API中,这个解析器是 SimpleDateFormat,它的创建方式如下

SimpleDateFormat formatter = new SimpleDateFormat(String pattern);

通过解析器,我们可以实现Date和String之间的相互转换 

String 转 Date

如果希望获取一个格式为"yyyy-MM-dd HH:mm:ss"的时间,就需要提供这样一个解析器,用来将字符串解析为时间

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

如当前代码需要将String类型的 "2024-12-24 23:59:59" 解析为Date 格式

String str = "2024-12-24 23:59:59";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = formatter.parse(str);

 Date 转 String

在上面例子的基础上,我们可以将LocalDateTime再转回String,只不过这次我们需要的时间格式是 "yyyy/MM/dd HH:mm:ss" ,方式如下

// 上面例子的字符串转时间
String str = "2024-12-24 23:59:59";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = formatter.parse(str);// 设置格式化器,指定时间格式为 yyyy/MM/dd HH:mm:ss
SimpleDateFormat date2StringFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
// 通过格式化器将 Date 解析为 String
String format = date2StringFormatter.format(date);

Calendar

如果需要通过指定年月日时分秒的方式获取Date,还可以使用Calendar

如当前需要获取 2024-12-24 00:00:00 的时间,方式如下

// 通过 getInstance() 方法获取Calendar对象
Calendar instance = Calendar.getInstance();
// 设置年月日时分秒
instance.set(2024, 12, 24, 0, 0, 0);
// getTime方法获取时间
Date date = instance.getTime();

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

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

相关文章

MySQL索引-索引的结构和原理

索引原理 查找算法 顺序查找 数组链表 二分查找 B树跳表 散列查找 Hash表 DFS 树图 BFS 树图 分块查找 海量数据 Hash结构 Hash索引可以方便的提供等值查询,但是对于范围查询就需要全表扫描了。 Hash索引在MySQL 中Hash结构主要应用在InnoDB 自适应哈希索引。…

【Linux探索学习】第二十三弹——理解文件系统:认识硬件、探索文件在硬件上的存储问题

Linux学习笔记:https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言: 我们前面讲过了文件的组成是由文件内容和文件属性两者组成的,但是我们前面接触的文件都是系统中的文件,都是已经在进…

深度学习中的并行策略概述:2 Data Parallelism

深度学习中的并行策略概述:2 Data Parallelism 数据并行(Data Parallelism)的核心在于将模型的数据处理过程并行化。具体来说,面对大规模数据批次时,将其拆分为较小的子批次,并在多个计算设备上同时进行处…

分布式专题(10)之ShardingSphere分库分表实战指南

一、ShardingSphere产品介绍 Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。Apache ShardingSphere 设计哲学为 Database Plus,旨在…

帧缓存的分配

帧缓存实际上就是一块内存。在 Android 系统中分配与回收帧缓存,使用的是一个叫 ION 的内核模块,App 使用 ioctl 系统调用后,会在内核内存中分配一块符合要求的内存,用户态会拿到一个 fd(有的地方也称之为 handle&…

vue3+vite一个IP对站点名称的前端curd更新-会议系统优化

vue3-tailwind-todo https://github.com/kgrg/vue3-tailwind-todo 基于这个项目,把ip到sta的映射做了前端管理. 核心代码是存储和获得的接口,需要flask提供. def redis2ipdic():global ipdicipdic.clear()tmdiccl.hgetall(IPDIC_KEY)for k in tmdic.keys():ipdic[k.decode() …

Elasticsearch-脚本查询

脚本查询 概念 Scripting是Elasticsearch支持的一种专门用于复杂场景下支持自定义编程的强大的脚本功能,ES支持多种脚本语言,如painless,其语法类似于Java,也有注释、关键字、类型、变量、函数等,其就要相对于其他脚本高出几倍的性…

golang LeetCode 热题 100(动态规划)-更新中

爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1:输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2&…

【每日学点鸿蒙知识】Charles抓包、lock文件处理、WebView组件、NFC相关、CallMethod失败等

1、HarmonyOS系统中如何使用Charles抓包? 在HarmonyOS操作系统中,使用Charles进行抓包的步骤如下: 在Charles中设置代理。 首先,在Charles的菜单栏上选择“Proxy”→“Proxy Settings”,然后填入代理端口&#xff0…

抓取手机HCI日志

荣耀手机 1、打开开发者模式 2、开启HCI、ADB调试 3、开启AP LOG 拨号界面输入*##2846579##* 4、蓝牙配对 5、抓取log adb pull /data/log/bt ./

WebAPI编程(第一天,第二天)

WebAPI编程(第一天,第二天) day01 - Web APIs 1.1. Web API介绍 1.1.1 API的概念1.1.2 Web API的概念1.1.3 API 和 Web API 总结 1.2. DOM 介绍 1.2.1 什么是DOM1.2.2. DOM树 1.3. 获取元素 1.3.1. 根据ID获取1.3.2. 根据标签名获取元素1.3.…

windows下Redis的使用

Redis简介: Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。 Redis通常被称为数据结构服务器,因为值(value&#xff…

【贪吃蛇小游戏 - JavaIDEA】基于Java实现的贪吃蛇小游戏导入IDEA教程

有问题请留言或私信 步骤 下载项目源码:项目源码 解压项目源码到本地 打开IDEA 左上角:文件 → 新建 → 来自现有源代码的项目 找到解压在本地的项目源代码文件,点击确定 选择“从现有项目创建项目”。点击“下一步” 点击下一步&a…

RTOS下的任务管理

2.3 RTOS下的任务管理(***) RTOS的任务管理主要是进行哪些功能? RTOS的任务管理的多任务管理是怎样进行与实现的? 任务管理中FreeRTOS如何给每个任务分配CPU时间? 文章目录 2.3 RTOS下的任务管理(***)2.3.0 任务概述2.3.1任务的创建与删除2.3…

深度学习——神经网络中前向传播、反向传播与梯度计算原理

一、前向传播 1.1 概念 神经网络的前向传播(Forward Propagation)就像是一个数据处理的流水线。从输入层开始,按照网络的层次结构,每一层的神经元接收上一层神经元的输出作为自己的输入,经过线性变换(加权…

【初阶数据结构与算法】八大排序算法之归并排序与非比较排序(计数排序)

文章目录 一、归并排序二、非比较排序之计数排序三、归并排序和计数排序的性能测试 一、归并排序 归并排序(MERGE-SORT)是建⽴在归并操作上的⼀种有效的排序算法,该算法是采⽤分治法(Divide andConquer)的⼀个⾮常典型的应⽤   …

window安装TradingView

目录 下载安装包 修改文件后缀,解压 将K线换成国内涨红跌绿样式 下载安装包 https://www.tradingview.com/desktop/ 下载完成后是.msix格式文件 (我在win10和win11的系统中尝试运行msix都没有成功,所以放弃直接双击运行msix&#xff…

FPGA多路MIPI转FPD-Link视频缩放拼接显示,基于IMX327+FPD953架构,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博主所有FPGA工程项目-->汇总目录我这里已有的 MIPI 编解码方案我这里已有的FPGA图像缩放方案本博已有的已有的FPGA视频拼接叠加融合方案 3、本 MIPI CSI-RX IP 介绍4、详细设计方案设计原理框图IMX327 及其配置FPD-Link视频…

React+Vite从零搭建项目及配置详解

相信很多React初学者第一次搭建自己的项目,搭建时会无从下手,本篇适合快速实现功能,熟悉React项目搭建流程。 目录 一、创建项目react-item 二、调整项目目录结构 三、使用scss预处理器 四、组件库Ant Design 五、配置基础路由 六、配置…

Unity复刻胡闹厨房复盘 模块一 新输入系统订阅链与重绑定

本文仅作学习交流,不做任何商业用途 郑重感谢siki老师的汉化教程与代码猴的免费教程以及搬运烤肉的小伙伴 版本:Unity6 模板:3D 核心 渲染管线:URP ------------------------------…