LocalDateTime,OffsetDateTime和ZonedDateTime(上)

在这里插入图片描述

图片来源:https://www.cnblogs.com/yourbatman/p/14324575.html

一. LocalDate和LocalTime

LocalDate代表不含时区信息的日期,它只能表示年、月、日。它适用于记录一个日子,比如生日、纪念日、或者任何只需要日期而不需要具体时间的场合。

LocalTime
代表不含日期和时区的时间,它只能表示小时、分钟、秒和纳秒。它适用于记录一天中的具体时间点,比如起床时间、会议开始时间等。

LocalDate相关方法

// 获取当前日期
LocalDate today = LocalDate.now();
System.out.println("当前日期:"+today);// 创建指定日期
LocalDate birthday = LocalDate.of(2024, Month.SEPTEMBER, 18);
System.out.println("创建指定日期:"+birthday);// 格式化日期
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String formattedDate = birthday.format(formatter);
System.out.println(formattedDate);// 解析日期
LocalDate parsedDate = LocalDate.parse("2025-09-18", formatter);
System.out.println(parsedDate);

LocalTime相关方法

// 获取当前时间
LocalTime now = LocalTime.now();
System.out.println("当前时间:"+now);// 创建指定时间
LocalTime dinnerTime = LocalTime.of(18, 30);
System.out.println("创建指定时间:"+dinnerTime);// 格式化时间
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
String formattedTime = dinnerTime.format(timeFormatter);
System.out.println(formattedTime);// 解析时间
LocalTime parsedTime = LocalTime.parse("18:30:00", timeFormatter);
System.out.println(parsedTime);
LocalDate和LocalTime的结合
// 结合日期和时间
LocalDateTime dateAndTime = LocalDateTime.of(birthday, dinnerTime);// 获取完整的日期时间
LocalDateTime nowDateTime = LocalDateTime.now();
关于格式化和解析时间的注意事项
  • 模式字符串:在DateTimeFormatter.ofPattern方法中使用的模式字符串必须与日期时间字符串的结构相匹配。例如,"yyyy-MM-dd HH:mm:ss"模式字符串表示一个包含四位年份、两位月份、两位日期、两位小时(24小时制)、两位分钟和两位秒的字符串。

  • 异常处理:在解析日期时间时,如果模式字符串与输入字符串不匹配,会抛出DateTimeParseException。

  • 时区:LocalDateTime和LocalDate类不包含时区信息。如果你需要处理时区,可以使用ZonedDateTime类。

使用场景
  • LocalDate:当你需要处理与时间无关的日期数据时,比如安排日程、记录事件日期等。
  • LocalTime:当你需要记录一天中的具体时刻,比如设定闹钟、安排会议时间等。
  • 结合使用:当你需要同时处理日期和时间,比如记录一个事件的具体发生时间。

二. ZoneOffset和ZoneId

ZoneOffset: 代表了一个固定的时区偏移量,它相对于协调世界时(UTC)。使用 ZoneOffset 就像是在 UTC 时间上加上或减去一定的小时和分钟数。

ZoneId
:代表了一个时区标识符,它不仅包括固定的偏移量,还可能包括夏令时(Daylight Saving Time, DST)规则。使用 ZoneId 意味着您正在处理一个具体的时区,它可能会根据当地的法律或规定而改变其偏移量。

如果有一个 UTC 时间,并且知道某个地区相对于 UTC 有 +8 小时的偏移(如北京时间),可以使用 ZoneOffset 来表示这个偏移。通过将这个偏移量加到 UTC 时间上,可以获得该地区的本地时间。

如果想将北京时间(Asia/Shanghai)切换到伦敦时间(Europe/London),可以使用 ZoneId 来实现。这不仅涉及到偏移量的更改,还可能涉及到夏令时的调整。

代码示例
LocalDateTime localDateTime = LocalDateTime.now();  
System.out.println(localDateTime);// 使用 ZoneOffset 转换为北京时间
ZonedDateTime beijingTime = localDateTime.atZone(ZoneOffset.ofHours(+8));
System.out.println("北京时间: " + beijingTime);// 使用 ZoneId 转换为伦敦时间,包括夏令时规则
ZonedDateTime londonTime = localDateTime.atZone(ZoneId.of("Europe/London"));
System.out.println("伦敦时间: " + londonTime);

ZoneOffset.ofHours(+8) 表示东八区的固定偏移,而 ZoneId.of("Europe/London") 表示伦敦的时区,它会自动考虑夏令时的变化

总结

ZoneOffset 更适合于简单的时间偏移操作

ZoneId 更适合于需要考虑时区规则和夏令时的场景

三. LocalDateTime,OffsetDateTime和ZonedDateTime

LocalDateTimeOffsetDateTimeZonedDateTime
定义表示没有时区信息的日期和时间,它仅包含年、月、日、小时、分钟、秒和纳秒。包含时区信息,但表示的是相对于UTC/Greenwich的偏移量(例如,+02:00, -08:00)。它包含LocalDateTime的信息和一个时区偏移量。包含时区信息的日期时间。它不仅包含LocalDateTime的所有信息,还包含时区ID(例如,Europe/Paris, America/New_York)。
用途适用于记录本地日期和时间,但不包含任何有关时区的信息。例如,记录一个事件的开始时间,而不需要考虑时区差异。适用于需要明确UTC偏移量的场景,例如,航空时间表、跨国数据交换等。适用于需要考虑时区的场景,如跨国会议时间的安排、用户在不同地区的登录时间记录等。
LocalDateTime相关方法
//获取当前日期和时间
LocalDateTime now = LocalDateTime.now();
System.out.println(now);//根据指定日期和时间创建
LocalDateTime dateTime = LocalDateTime.of(2024, Month.MAY, 19, 15, 30);
System.out.println(dateTime);//格式化和解析日期时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatted = formatter.format(dateTime);
String parsed = dateTime.format(formatter);//计算日期时间的差值
Duration duration = Duration.between(dateTime, now);
long hoursBetween = duration.toHours();
System.out.println(hoursBetween);
OffsetDateTime相关方法
//获取当前日期和时间,指定UTC偏移量
OffsetDateTime now = OffsetDateTime.now(ZoneOffset.UTC);
System.out.println(now);//根据指定日期、时间和UTC偏移量创建OffsetDateTime
OffsetDateTime offsetDateTime = OffsetDateTime.of(LocalDateTime.of(2024, Month.MAY, 29, 15, 30), ZoneOffset.ofHours(2));
System.out.println(offsetDateTime);//转换UTC偏移量
OffsetDateTime withNewOffset = offsetDateTime.withOffsetSameInstant(ZoneOffset.ofHours(-5));
System.out.println(withNewOffset);
ZonedDateTime相关方法
//获取当前日期和时间,指定时区
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("America/New_York"));
System.out.println(now);//根据指定日期、时间和时区创建ZonedDateTime
ZonedDateTime zonedDateTime = ZonedDateTime.of(LocalDateTime.of(2024, Month.MAY, 29, 15, 30), ZoneId.of("Europe/Paris"));
System.out.println(zonedDateTime);//转换时区
ZonedDateTime inNewYork = zonedDateTime.withZoneSameInstant(ZoneId.of("America/New_York"));
System.out.println(inNewYork);//获取时区信息
ZoneId zone = zonedDateTime.getZone();
String zoneId = zone.getId();
System.out.println(zoneId);

下一篇详细讲解常用api

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

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

相关文章

前端框架大比拼:React、Angular、Vue、Svelte、Ember,哪个才是你的终极选择!

前端开发框架在现代Web开发中扮演着至关重要的角色。它们不仅提高了开发效率,还改善了代码的可维护性和扩展性。以下是一些流行的前端框架及其对比,帮助你选择最适合你项目需求的框架。 1. React 优点: 生态系统丰富: React 拥有庞大的社区…

【SpringCloud】注册中心的其他实现 - Nacos

目录 注册中心的其他实现-NacosNacos简介Nacos安装下载安装包Windows解压修改单机模式启动Nacos常见问题 Linux准备安装包单机模式启动常见问题 Nacos快速上手服务注册/服务发现引入Spring Cloud Alibaba依赖引入Nacos 依赖引入Load Balance依赖 配置Nacos地址远程调用启动服务…

SpringCloud微服务实现服务熔断的实践指南

Spring Cloud是一套分布式系统的微服务框架,它提供了一系列的组件和工具,能够使我们更容易地构建和管理微服务架构。在实际开发中,由于各个服务之间的通信依赖,一旦某个服务出现故障或负载过高,可能会导致整个系统的性…

百度飞浆Paddle OCR检测和识别【OCR数据收集、标注、数据集划分、检测识别模型训练、导出模型】

文章目录 前言一、OCR数据集采集二、OCR数据标注三、划分数据集四、数据训练五、导出模型 前言 1、我的电脑没有GPU,如果不使用AI Studio训练的话,第一遍我是按照CPU进行环境配置和训练的,可以参考这篇文章,我按着弄了一遍&#…

深度学习(一)——CMC特刊推荐

点击蓝字 关注我们 特刊征稿 01 期刊名称: Multimedia Security in Deep Learning 截止时间: 提交截止日期:2024年9月30日 目标及范围: 题为“深度学习中的多媒体安全”的特刊是一个平台,旨在推动深度学习在多媒体安全领域的创…

山体滑坡检测系统源码分享

山体滑坡检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

(黑马点评)八、实现签到统计和uv统计

8.1 签到统计系列功能 8.1.1 认识BitMap结构 BitMap是Redis基于String实现的一种高效的二进制数位的数据结构。因此一个BItMap的最大上线为512M,转为bit位可表示 2^32位 常见命令 SETBIT:向指定位置(offset)存入一个0或1 GETBIT …

CST软件超表面---电容或变容二极管调焦反射镜

可变焦的超表面(focus tunable metasurface)类型反射镜具有超薄、智能可控等特点,可用于成像、显微等应用。而且经常有朋友问如何用电容或二极管调控超材料,这期我们就用个简单的案例看看调控效果。 1. 单元仿真 单元尺寸我们用1…

【原创教程】电气电工20:一文弄透电气电工辅材

电气电工这些知识点,我们描述的比较细,虽然看起来比较简单,但是它是后面我们技能提升的基础,如果我们后面学电气工程师相关知识,这些都属于基本功。 接着我们来看一下电气辅材。 电气辅材定义: 电气辅材是指与电气设备固有的元器件配套使用的配件和器具。常见的电气辅…

Python “函数” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业

本文主要是作为Python中函数的一些题目,方便学习完Python的函数之后进行一些知识检验,感兴趣的小伙伴可以试一试,含选择题、判断题、实战题、填空题,答案在第五章。 在做题之前可以先学习或者温习一下Python的函数,推荐…

构建高效用户中心的技术方案

一、架构设计 在设计用户中心时,首先要考虑其架构。推荐采用微服务架构,这样可以将不同功能模块独立开来,便于后期维护和扩展。例如,可以将用户注册、登录、信息管理、权限控制等功能分为不同的服务模块。 二、前端开发 前端是…

【2022工业图像异常检测文献】PatchCore

Towards Total Recall in Industrial Anomaly Detection 1、Background 工业图像异常检测主要解决 冷启动问题 ,即仅使用正常(无缺陷)样本图像来训练模型。 现有的关于冷启动工业视觉异常检测的工作依赖于通过自编码方法、生成对抗网络或其…

高速CT滑环的特点分析

高速CT滑环在现代成像技术中发挥着至关重要的作用,尤其是在医学成像设备和工业检测系统中。这种滑环不仅满足高速旋转的需求,还确保了信号和电力的稳定传输。本文将详细分析高速CT滑环的主要特点及其应用优势。 高速CT滑环的第一个特点是其高传输速率。…

101. 对称二叉树【同时遍历两棵树】【C++】

题目描述 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false 提示: …

Flet内置图标库ft.icons的图标如何使用庖丁解牛深度解读讲解,源代码IDE运行和调试通过

序言 Flet内置图标库图标丰富多彩、包罗万象。flet内置图标库指ft.icons图标库。使用Flet框架编写程序和项目,就要使用 Flet 内置图标库图标。使用 Flet 内置图标库的图标好处很多。 具体说有以下好处: 便捷性:无需额外寻找和下载图标资源&…

「OC」present和push操作区别以及混合推出的实现

「OC」present和push操作区别以及混合推出的实现 文章目录 「OC」present和push操作区别以及混合推出的实现前言present用途while循环越级返回通知越级返回添加present动画 push模态视图和push视图混合跳转操作一:控制器Apresent控制器B,控制器B再将控制…

影视会员充值api?接口对接需要做哪些准备工作?

影视会员充值 API 接口对接主要有以下步骤: 1.前期准备 明确自身需求:确定你希望通过 API 接口实现的功能,例如支持哪些影视平台的会员充值、是否需要获取会员信息、是否需要订单查询功能等。选择合适的 API 提供商:官方视频平台…

中国电子学会202312青少年软件编程(Python)等级考试试卷(三级)真题

2023年12月青少年软件编程Python等级考试(三级)真题试卷 题目总数:38 总分数:100 一、选择题 第 1 题 单选题 一个非零的二进制正整数,在其末尾添加两个“0”,则该新数将是原数的?( ) A.10倍 B.2倍 C.4倍 D.8倍 第 2 题 单选题 2023年亚运会将在杭…

分步指南:如何使用 ChatGPT 撰写文献综述

撰写文献综述对于研究人员和学生来说,往往是一项既耗时又复杂的任务。这一过程不仅要求对所选主题的现有研究进行全面的了解和掌握,还需要学术严谨性。然而,随着像 ChatGPT 这样的高级语言模型的广泛应用,撰写文献综述的过程变得更加高效和简化。通过合理利用 ChatGPT,研究…

跨国公司决策的影响与中国IT产业的应对

跨国公司在华研发中心的调整是一个复杂的现象,它可能受到多种因素的影响,包括全球经济环境的变化、成本考量、战略重心的转移以及地缘政治因素等。IBM中国研发中心的撤出可能会对中国IT行业造成短期的就业压力,加速人才流动,并促使…