Java中的时间与日期处理:使用java.time包的最佳实践

Java中的时间与日期处理:使用java.time包的最佳实践

大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来聊聊Java中时间与日期处理的最佳实践,主要聚焦于java.time包。自从Java 8引入java.time包后,日期与时间处理变得更加简洁、直观和安全。本文将通过实际代码示例来展示如何使用java.time包处理日期和时间。

一、基础类:LocalDate、LocalTime和LocalDateTime

LocalDateLocalTimeLocalDateTimejava.time包中最常用的类,它们分别表示日期、时间和日期时间组合。

1. LocalDate使用示例

LocalDate类表示一个无时区的日期,比如2024-09-10。

package cn.juwatech.datetime;import java.time.LocalDate;public class LocalDateExample {public static void main(String[] args) {// 获取当前日期LocalDate currentDate = LocalDate.now();System.out.println("当前日期: " + currentDate);// 创建特定日期LocalDate specificDate = LocalDate.of(2023, 9, 10);System.out.println("特定日期: " + specificDate);// 日期运算LocalDate tomorrow = currentDate.plusDays(1);System.out.println("明天: " + tomorrow);LocalDate lastMonth = currentDate.minusMonths(1);System.out.println("上个月: " + lastMonth);}
}

2. LocalTime使用示例

LocalTime类用于表示一天中的时间,不包含日期部分。

package cn.juwatech.datetime;import java.time.LocalTime;public class LocalTimeExample {public static void main(String[] args) {// 获取当前时间LocalTime currentTime = LocalTime.now();System.out.println("当前时间: " + currentTime);// 创建特定时间LocalTime specificTime = LocalTime.of(14, 30, 15);System.out.println("特定时间: " + specificTime);// 时间运算LocalTime nextHour = currentTime.plusHours(1);System.out.println("一小时后: " + nextHour);LocalTime tenMinutesBefore = currentTime.minusMinutes(10);System.out.println("十分钟前: " + tenMinutesBefore);}
}

3. LocalDateTime使用示例

LocalDateTime类是日期和时间的组合,表示一个具体的日期和时间。

package cn.juwatech.datetime;import java.time.LocalDateTime;public class LocalDateTimeExample {public static void main(String[] args) {// 获取当前日期时间LocalDateTime currentDateTime = LocalDateTime.now();System.out.println("当前日期时间: " + currentDateTime);// 创建特定的日期时间LocalDateTime specificDateTime = LocalDateTime.of(2023, 9, 10, 14, 30);System.out.println("特定日期时间: " + specificDateTime);// 日期时间运算LocalDateTime nextWeek = currentDateTime.plusWeeks(1);System.out.println("一周后: " + nextWeek);LocalDateTime lastYear = currentDateTime.minusYears(1);System.out.println("去年今天: " + lastYear);}
}

二、处理时区:ZonedDateTime与OffsetDateTime

在实际应用中,处理时区是经常需要的。ZonedDateTimeOffsetDateTime可以帮助我们方便地处理时区问题。

1. ZonedDateTime使用示例

ZonedDateTime类表示带时区的日期时间。

package cn.juwatech.datetime;import java.time.ZoneId;
import java.time.ZonedDateTime;public class ZonedDateTimeExample {public static void main(String[] args) {// 获取当前时区的日期时间ZonedDateTime currentZonedDateTime = ZonedDateTime.now();System.out.println("当前时区日期时间: " + currentZonedDateTime);// 获取特定时区的日期时间ZonedDateTime tokyoTime = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));System.out.println("东京时区当前时间: " + tokyoTime);// 转换时区ZonedDateTime newYorkTime = currentZonedDateTime.withZoneSameInstant(ZoneId.of("America/New_York"));System.out.println("纽约时区当前时间: " + newYorkTime);}
}

2. OffsetDateTime使用示例

OffsetDateTime表示带有固定时区偏移量的日期时间。

package cn.juwatech.datetime;import java.time.OffsetDateTime;
import java.time.ZoneOffset;public class OffsetDateTimeExample {public static void main(String[] args) {// 获取当前日期时间带偏移量OffsetDateTime currentOffsetDateTime = OffsetDateTime.now();System.out.println("当前偏移日期时间: " + currentOffsetDateTime);// 创建特定偏移量的日期时间OffsetDateTime offsetDateTime = OffsetDateTime.of(2023, 9, 10, 14, 30, 0, 0, ZoneOffset.of("+09:00"));System.out.println("特定偏移量日期时间: " + offsetDateTime);}
}

三、格式化与解析:DateTimeFormatter

DateTimeFormatter类用于对日期和时间进行格式化和解析,提供了多种预定义的格式化模式,也支持自定义模式。

1. 格式化日期时间

package cn.juwatech.datetime;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class DateTimeFormatterExample {public static void main(String[] args) {LocalDateTime now = LocalDateTime.now();// 使用内置格式化器DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String formattedDateTime = now.format(formatter);System.out.println("格式化后的日期时间: " + formattedDateTime);}
}

2. 解析日期时间字符串

package cn.juwatech.datetime;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class DateTimeParsingExample {public static void main(String[] args) {String dateTimeStr = "2023-09-10 14:30:00";// 使用相同的模式解析DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDateTime dateTime = LocalDateTime.parse(dateTimeStr, formatter);System.out.println("解析后的日期时间: " + dateTime);}
}

四、处理时间间隔:Duration和Period

Duration用于计算两个时间之间的间隔(精确到秒及纳秒),而Period则是用于计算两个日期之间的间隔(精确到天、月、年)。

1. 使用Duration处理时间间隔

package cn.juwatech.datetime;import java.time.Duration;
import java.time.LocalTime;public class DurationExample {public static void main(String[] args) {LocalTime start = LocalTime.of(14, 0);LocalTime end = LocalTime.of(16, 30);Duration duration = Duration.between(start, end);System.out.println("时间间隔: " + duration.toHours() + " 小时 " + duration.toMinutesPart() + " 分钟");}
}

2. 使用Period处理日期间隔

package cn.juwatech.datetime;import java.time.LocalDate;
import java.time.Period;public class PeriodExample {public static void main(String[] args) {LocalDate birthDate = LocalDate.of(1990, 9, 10);LocalDate currentDate = LocalDate.now();Period period = Period.between(birthDate, currentDate);System.out.println("年龄: " + period.getYears() + " 年 " + period.getMonths() + " 个月 " + period.getDays() + " 天");}
}

总结

通过使用java.time包中的各个类,Java中的日期和时间处理变得更加直观和简单。我们可以使用这些类来处理不同场景下的日期和时间需求,无论是本地日期时间还是带有时区的日期时间,同时还能轻松实现日期时间的格式化、解析和计算。

本文著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!

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

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

相关文章

Miracast/WifiDisplay开发相关的深入调研分析-android投屏实战开发

Miracast/WifiDisplay概念介绍 Miracast Miracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准。支持此标准的消费性电子产品(又称3C设备)可透过无线方式分享视频画面,例如…

VirtualBox 克隆已有的虚拟机

【前提】已经存在一个CentOS 7 虚拟机 【需求】克隆出来一个虚拟机,用于本机 【操作】 1.右击已有的虚拟机 -> 选择克隆 2.给新虚拟机起个名称 以及 生成新的MAC地址 3.克隆 4.修改网络和主机名称 # 修改网络编辑以下2个文件 vi /etc/sysconfig/network-scripts/ifcfg-enp…

Java之内部类

目录 实例内部类 静态内部类 局部内部类 匿名内部类 下面将讲解实例内部类,静态内部类,局部内部类和匿名内部类。 实例内部类 实例内部类(也称为非静态内部类)依赖于外部类的实例。这意味着,要创建实例内部类的实…

Kubernetes从零到精通(12-Ingress、Gateway API)

Ingress和Gateway API都是Kubernetes中用于管理外部访问集群服务的机制,但它们有不同的设计理念和适用场景。它们的基本原理是通过配置规则,将来自外部的网络流量路由到Kubernetes集群内部的服务上。 Ingress/Gateway API和Service Ingress/Gateway API…

Qt窗口——QToolBar

文章目录 工具栏创建工具栏设置toolTip工具栏配合菜单栏工具栏浮动状态 工具栏 QToolBar工具栏是应用程序中集成各种功能实现快捷键使用的一个区域。 可以有多个,也可以没有。 创建工具栏 #include "mainwindow.h" #include "ui_mainwindow.h&qu…

ARM 工业边缘计算机与 C# 编程的完美融合

在工业领域,随着智能化和数字化的不断推进,ARM 工业边缘计算机凭借其出色的性能和低功耗等优势,逐渐成为众多应用场景的重要支撑。而 C# 编程语言的强大功能和广泛适用性,使其在与 ARM 工业边缘计算机的结合中展现出了巨大的潜力。…

壹嘉情,中国与世界经济文化交流的新桥梁

壹嘉情正在全球华商领域迅速崛起。作为意大利华商总会的中国分部,壹嘉情承载着推动两岸及全球华商深度合作、实现资源共享和互利共赢的使命。它的成立标志着意大利华商总会在全球战略布局上的重要一步,同时也昭示了全球化浪潮中,华人企业正加…

LNMP的简单安装(ubuntu)

LNMP介绍 LNMP 是一种常见的开源软件组合,用于搭建高效的网站服务器环境。LNMP 代表以下四个组件: Linux:操作系统。Linux 是一种稳定、可靠、安全的开源操作系统,常用于服务器环境,特别是在企业级部署中。它负责底层…

小程序——生命周期

文章目录 运行机制更新机制生命周期介绍应用级别生命周期页面级别生命周期组件生命周期生命周期两个细节补充说明总结 运行机制 用一张图简要概述一下小程序的运行机制 冷启动与热启动: 小程序启动可以分为两种情况,一种是冷启动,一种是热…

js 深入理解生成器

目录 概述1 . 生成器基础2. 与普通函数的区别3. 通过 yield 中断执行3.1 yield 是干嘛的?3.2 yield 和 return 的区别3.3 每个生成器对象作用域都是独立的3.4 yeild 的使用位置3.5 生成器对象作为可迭代对象3.6 使用 yield 实现输入和输出3.6.1 yield实现输入3.6.1 …

【JVM安装MySQL】

环境 > VMware Workstation Pro > CentOS 7 >Navicat Premium Lite > MobaXterm添加 MySQL Yum 仓库 根据操作系统在下载界面选取对应yum库进行下载 wget https://dev.mysql.com/get/mysql80-community-release-el7-9.noarch.rpm在文件下载界面安装 rpm -ivh mysq…

<<编码>> 第 14 章 反馈与触发器(3)--锁存器与触发器 示例电路

电平触发 D 型触发器 info::操作说明 鼠标单击逻辑输入切换 0|1 状态 因复位和置位不应同时处在高电平, 因此在输入处加入一个非门反向, 然后复位和置位输入合并为 数据(Data) 输入 注: 当保持位为 0 时, 数据输入无效 primary::在线交互操作链接 https://cc.xiaogd.net/?star…

Stylized Smooth Clouds 卡通风格化云朵包

下载:​​Unity资源商店链接资源下载链接 效果图:

Spring考点总结

01.Spring框架的基本理解 关键字:核心思想IOC\AOP\作用(解耦、简化),简单描述框架组成 Spring框架是一款轻量级的开发框架,核心思想是IOC(控制反转)和AOP(面向切面编程), 为Java应用程序开发…

数字IC设计\FPGA 职位经典笔试面试整理--语法篇 Verilog System Verilog(部分)

注: 资料都是基于网上一些博客分享和自己学习整理而成的 Verilog 1. 数据类型 Verilog一共有19种数据类型 基础四种数据类型:reg型,wire型,integer型,parameter型 reg型   reg类型是寄存器数据类型的关键字。寄存…

软考(中级-软件设计师)(0919)

软考 一、软件设计师-历年考试考点分布情况-上午-计算机与软件工程知识 知识点分数说明比例软件工程基础知识11开发模型、设计原则、测试方法、质量特性、CMM、Pert图、风险管理14.67%面向对象12面向对象基本概念、面向对象分析与设计、UML、常见算法16.00%数据结构与算法10…

【HarmonyOS NEXT】DevEco快速实现真机截屏,并保存到电脑

点日志点照机图标选一个路径保存图片在ide中右键图片,点复制电脑随便找个位置保存图片https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-screenshot-V5

使用Ubuntu耳机输出正弦波信号

最近有一个项目想使用喇叭发出一个标准的正弦波测试信号,故记录下操作过程 sudo apt install libasound2-dev 否则有可能会报错: alsaaudio.c:28:10: fatal error: alsa/asoundlib.h: No such file or directory 安装pyalsaaudio: pip …

IE浏览器彻底去除浏览器缓存的方法

1.浏览器右上方如图操作 2.点击后会弹出窗口,如图操作 3.点击查看文件如图操作 4.点击后会弹出一个文件夹,在文件夹内CtrlA全选删除全部文件就可以,有提示直接确认即可

智能车镜头组入门(三)巡线

镜头组的特点是通过摄像头来获取赛道的信息,从而达到前瞻的效果,完成转向和速度决策。 我们的方案,带上元素识别,大概在TC264上5ms一帧,所以我们开了100hz的图象。 之前我看别的博客上有人说,他们组的50帧…