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,一经查实,立即删除!

相关文章

html 中 表格和表单的关系与区别

在 HTML 中&#xff0c;表格 (<table>) 和表单 (<form>) 是两种常用于展示数据和收集用户输入的元素。它们具有不同的功能和结构。以下是关于这两者的详细介绍&#xff1a; 1. HTML 表格&#xff08;<table>&#xff09; 表格用于展示结构化的数据&#xf…

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

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

【C语言】结构

将不同类型的值存储在一起构成结构。 在C语言中&#xff0c;有数组和结构两种聚合数据类型。聚合数据类型指的是能够同时存储一个以上的单独数据。 数组是相同类型的元素的集合&#xff0c;其每个元素是通过下标引用或指针间接访问来选择的。 结构也是一些值的集合&#xff…

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

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

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

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

中国农业科学院深圳农业基因组研究所合成生物学研究中心-随笔06

更新读研择校贴&#xff0c;生物合成行业领先的单位一览SWHC002 中国科学院合成生物学重点实验室介绍-随笔05-CSDN博客 中国农业科学院深圳农业基因组研究所&#xff08;基因组所&#xff09;合成生物学研究中心 https://www.agis.org.cn/bsgk/yjsjj/index.htm #官网 htt…

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

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

QT 控件定义为智能指针引发的bug

问题描述&#xff1a; std::unique_ptr<QStackedLayout> m_stacked_layout; 如上为定义&#xff1b; 调用&#xff1a; Line13ABClient::Line13ABClient(QWidget *parent) : BaseWidget(parent) { // 成员变量初始化 m_get_ready false; m_tittle_wnd…

帧缓存的分配

帧缓存实际上就是一块内存。在 Android 系统中分配与回收帧缓存&#xff0c;使用的是一个叫 ION 的内核模块&#xff0c;App 使用 ioctl 系统调用后&#xff0c;会在内核内存中分配一块符合要求的内存&#xff0c;用户态会拿到一个 fd&#xff08;有的地方也称之为 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支持的一种专门用于复杂场景下支持自定义编程的强大的脚本功能&#xff0c;ES支持多种脚本语言&#xff0c;如painless&#xff0c;其语法类似于Java,也有注释、关键字、类型、变量、函数等&#xff0c;其就要相对于其他脚本高出几倍的性…

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

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

EasyExcel 模板+公式填充

使用 CellWriteHandler 的实现类来实现公式写入 Data NoArgsConstructor public class CustomCellWriteHandler implements CellWriteHandler {private int maxRowNum 2000;// 动态传入列表数量public CustomCellWriteHandler(int maxRowNum) {this.maxRowNum maxRowNum;}Ov…

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

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

抓取手机HCI日志

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

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

WebAPI编程&#xff08;第一天&#xff0c;第二天&#xff09; 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简介&#xff1a; Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库&#xff0c;并提供多种语言的 API。 Redis通常被称为数据结构服务器&#xff0c;因为值&#xff08;value&#xff…

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

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

一个简单封装的的nodejs缓存对象

我们在日常编码中&#xff0c;经常会用到缓存&#xff0c;而一个有效的缓存管理&#xff0c;也是大家必不可少的工具。而nodejs没有内置专用的缓存对象&#xff0c;并且由于js的作用域链的原因&#xff0c;很多变量使用起来容易出错&#xff0c;如果用一个通用的缓存管理起来&a…

RTOS下的任务管理

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