【Java学习笔记】日期类

日期类

第一代日期类:Date

引入包

1. 基本介绍

2. Date 格式化的参数表

请添加图片描述

3. 方法介绍

(1)Date

(2)SimpleDateFormat

代码示例

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class main {public static void main(String[] args) throws ParseException {Date date = new Date();System.out.println("date:" + date);Date date1 = new Date(89875);System.out.println("date1:" + date1);// 使用 SimpleDateFormat 来格式化日期(Date --> String)SimpleDateFormat sf = new SimpleDateFormat("yyyy 年 MM 月 dd 日 hh:mm:ss E");String format_date = sf.format(date);System.out.println("Formatted date: " + format_date);// String --> DateString s = "1996 年 01 月 01 日 10:20:30 星期一";Date String_to_Date = sf.parse(s);System.out.println("parse = " + sf.format(String_to_Date));}
}// 输出结果
date:Sun Jun 08 17:51:23 CST 2025
date1:Thu Jan 01 08:01:29 CST 1970
Formatted date: 2025060805:51:23 星期日
parse = 1996010110:20:30 星期一

二、第二代日期类:Calendar

引入包:java.util.Calendar

基本介绍

常用字段

字段描述
YEAR年份
MONTH月份(0-11) 从 0 开始编号
DAY_OF_MONTH当前月的天数
HOUR当前小时(0-23)
MINUTE当前分钟(0-59)
SECOND当前秒数(0-59)
DAY_OF_WEEK一周中的某一天(1-7,1 代表星期天)
WEEK_OF_YEAR一年的第几周
WEEK_OF_MONTH当前月的第几周
AM_PM上午或下午(0 为上午1 为下午

获取当前时间:getTime()方法

Calendar date = Calendar.getInstance();// 输出当前日期时间
System.out.println("日期:" + date.getTime());

代码示例

package arrays;import java.util.Calendar;public class main {public static void main(String[] args) {Calendar date = Calendar.getInstance();// 输出当前日期时间System.out.println("=====输出当前日期时间=====");System.out.println("日期:" + date.getTime());System.out.println();// 输出年、月、日、时、分、秒等信息System.out.println("=====输出年、月、日、时、分、秒等信息=====");System.out.println("年:" + date.get(Calendar.YEAR));System.out.println("月:" + (date.get(Calendar.MONTH) + 1)); // 月份是从0开始的,所以要加1System.out.println("日:" + date.get(Calendar.DAY_OF_MONTH));System.out.println("小时:" + date.get(Calendar.HOUR_OF_DAY)); // 24小时制System.out.println("分钟:" + date.get(Calendar.MINUTE));System.out.println("秒:" + date.get(Calendar.SECOND));System.out.println();// 拼接年月日时分秒System.out.println("=====拼接年月日时分秒=====");String currentDateTime = date.get(Calendar.YEAR) + "年"+ (date.get(Calendar.MONTH) + 1) + "月"+ date.get(Calendar.DAY_OF_MONTH) + "日 "+ date.get(Calendar.HOUR_OF_DAY) + ":"+ date.get(Calendar.MINUTE) + ":"+ date.get(Calendar.SECOND);System.out.println("当前时间:" + currentDateTime);System.out.println();// 输出一周中的某一天、周数等System.out.println("=====输出一周中的某一天、周数等=====");System.out.println("星期几:" + date.get(Calendar.DAY_OF_WEEK)); // 1代表星期天,7代表星期六System.out.println("一年中的第几周:" + date.get(Calendar.WEEK_OF_YEAR));System.out.println("当前月的第几周:" + date.get(Calendar.WEEK_OF_MONTH));System.out.println();// 输出上午下午信息System.out.println("=====输出上午下午信息=====");System.out.println("上午 / 下午:" + (date.get(Calendar.AM_PM)));}
}// 输出结果
=====输出当前日期时间=====
日期:Sun Jun 08 18:14:53 CST 2025=====输出年、月、日、时、分、秒等信息=====
年:2025
月:6
日:8
小时:18
分钟:14
秒:53=====拼接年月日时分秒=====
当前时间:20256818:14:53=====输出一周中的某一天、周数等=====
星期几:1
一年中的第几周:24
当前月的第几周:2=====输出上午下午信息=====
上午 / 下午:1

三、第三代日期类

引入包

1. 引言

前面两代日期类的不足分析

JDK 1.0 中包含了一个 java.util.Date 类,但是它的大多数方法已经在 JDK 1.1 引入 Calendar 类之后被弃用了。而Calendar存在问题是:

2. 常用类

(1)时间的表示

补充:时间的创建

方法名描述
LocalTime.of(hour, minute)创建一个表示特定时间的 LocalTime 对象(包含小时、分钟)。
LocalTime.of(hour, minute, second)创建一个表示特定时间的 LocalTime 对象(包含小时、分钟和秒)。
LocalTime.of(hour, minute, second, nanoOfSecond)创建一个表示特定时间的 LocalTime 对象(包含小时、分钟、秒和纳秒)。

(2)日期的计算

适用于LocalDateLocalTimeLocalDateTime

方法解释
plusDays(long daysToAdd)将指定的天数加到当前日期(LocalDateLocalDateTime)。
minusDays(long daysToSubtract)从当前日期(LocalDateLocalDateTime)中减去指定的天数。
plusMonths(long monthsToAdd)将指定的月数加到当前日期(LocalDateLocalDateTime)。
minusMonths(long monthsToSubtract)从当前日期(LocalDateLocalDateTime)中减去指定的月数。
plusYears(long yearsToAdd)将指定的年数加到当前日期(LocalDateLocalDateTime)。
minusYears(long yearsToSubtract)从当前日期(LocalDateLocalDateTime)中减去指定的年数。

补充类

关于between()方法传参问题的说明

(1)Period.between()方法

方法名传入参数类型适用情况说明
Period.between()LocalDate用于计算日期差(年、月、日)只能用于 LocalDate 类型的日期之间的差异。无法处理时间差(时、分、秒)。

(2)Duration.between()方法

方法名传入参数类型适用情况说明
Duration.between()Temporal(如 LocalTime, LocalDateTime, Instant用于计算时间差(时、分、秒)Temporal 是一个接口,LocalTimeLocalDateTimeInstant 实现了此接口,可以用于计算这三者之间的时间差。

(3)日期的格式化DateTimeFormatter类(不可变且线程安全的类

(4)时间戳

  • Instant: 用于表示时间戳,通常与 UTC 时间一起使用,精确到纳秒。例如:2025-06-08T09:30:00Z。

  • from()方法:InstantDate

  • toInstant()方法:DateInstant

3. get...()方法整理

注意:java.time 类库中的 get() 方法返回的是真实数据并且不会从 0 开始编号

方法描述
年月日相关
getYear()获取当前年份
getMonthValue()获取当前月份(1-12
getMonth()获取当前月份的名称
getDayOfMonth()获取当前日期(1-31)
getDayOfYear()获取当前日期是今年的第几天(1 - 365/366)
getDayOfWeek().getValue()获取当前星期几(1=星期一, 7=星期天)
时分秒相关
getHour()获取当前小时(0-23)
getMinute()获取当前分钟(0-59)
getSecond()获取当前秒数(0-59)

一、时间的表示:代码示例

说明:LocalDateLocalTime方法类似(需要导入相关的包),这以LocalDateTime为例

import java.time.LocalDateTime;public class main {public static void main(String[] args) {LocalDateTime now = LocalDateTime.now();// 年月日相关System.out.println("当前年份: " + now.getYear());System.out.println("当前月份(1-12): " + now.getMonthValue());System.out.println("当前月份名称: " + now.getMonth());System.out.println("当前日期(1-31): " + now.getDayOfMonth());System.out.println("当前日期是今年的第几天: " + now.getDayOfYear());System.out.println("当前星期几(1=星期一, 7=星期天): " + now.getDayOfWeek().getValue());// 时分秒相关System.out.println("当前小时(0-23): " + now.getHour());System.out.println("当前分钟(0-59): " + now.getMinute());System.out.println("当前秒数(0-59): " + now.getSecond());}
}// 输出信息
当前年份: 2025
当前月份(1-12: 6
当前月份名称: JUNE
当前日期(1-31: 8
当前日期是今年的第几天: 159
当前星期几(1=星期一, 7=星期天): 7
当前小时(0-23: 19
当前分钟(0-59: 55
当前秒数(0-59: 59

二、日期的格式化:代码示例

补充:类比记忆Date中的格式化

调用SimpleDateFormat构造器传入格式化信息的字符串

(1)format代码示例

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class main {public static void main(String[] args) {LocalDateTime now  = LocalDateTime.now();// 创建格式化对象DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss E");// 格式化字符串String format_date = dtf.format(now);// 输出格式化后的时间信息System.out.println(format_date);}
}// 输出示例
2025-06-08 20:14:56 星期日

(2)parse代码示例

传参:parse(n1,n2)

注意:被格式化字符串要和格式化信息匹配,否则会抛出异常(DateTimeParseException

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class main {public static void main(String[] args) {String str_datetime = "2025-06-08 14:30:00";// 创建格式化对象DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// String --> LocalDateTimeLocalDateTime localDateTime = LocalDateTime.parse(str_datetime,dtf);System.out.println(localDateTime);}
}// 输出结果
2025-06-08T14:30

三、日期的计算:代码示例

(1)对于LocalDateTimeLocalDateLocalTime的计算方法

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class main {public static void main(String[] args) {// 获取当前时间LocalDateTime now = LocalDateTime.now();// 定义日期格式化器DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// 格式化当前日期String formattedDate = now.format(formatter);System.out.println("当前日期和时间(格式化): " + formattedDate);// 添加和减去天数并格式化LocalDateTime newDate = now.plusDays(10);System.out.println("加10天后的日期(格式化): " + newDate.format(formatter));newDate = now.minusDays(5);System.out.println("减去5天后的日期(格式化): " + newDate.format(formatter));// 添加和减去月数并格式化newDate = now.plusMonths(3);System.out.println("加3个月后的日期(格式化): " + newDate.format(formatter));newDate = now.minusMonths(2);System.out.println("减去2个月后的日期(格式化): " + newDate.format(formatter));// 添加和减去年数并格式化newDate = now.plusYears(1);System.out.println("加1年后的日期(格式化): " + newDate.format(formatter));newDate = now.minusYears(4);System.out.println("减去4年后的日期(格式化): " + newDate.format(formatter));}
}// 输出结果
当前日期和时间(格式化): 2025-06-08 20:48:4210天后的日期(格式化): 2025-06-18 20:48:42
减去5天后的日期(格式化): 2025-06-03 20:48:423个月后的日期(格式化): 2025-09-08 20:48:42
减去2个月后的日期(格式化): 2025-04-08 20:48:421年后的日期(格式化): 2026-06-08 20:48:42
减去4年后的日期(格式化): 2021-06-08 20:48:42

(2)Period 代码示例

import java.time.LocalDate;
import java.time.Period;public class PeriodExample {public static void main(String[] args) {LocalDate startDate = LocalDate.of(2020, 1, 1);LocalDate endDate = LocalDate.of(2025, 6, 8);Period period = Period.between(startDate, endDate);System.out.println("期间:");System.out.println("年: " + period.getYears());System.out.println("月: " + period.getMonths());System.out.println("日: " + period.getDays());}
}// 输出结果
期间:
年: 5: 5: 7

(3)Duration 代码示例

import java.time.Duration;
import java.time.LocalDateTime;public class DurationExample {public static void main(String[] args) {LocalDateTime startTime = LocalDateTime.of(2025, 6, 8, 10, 30, 0);LocalDateTime endTime = LocalDateTime.of(2025, 6, 9, 12, 45, 0);Duration duration = Duration.between(startTime, endTime);System.out.println("持续时间:");System.out.println("小时: " + duration.toHours());System.out.println("分钟: " + duration.toMinutes());System.out.println("秒: " + duration.getSeconds());}
}// 运行结果
持续时间:
小时: 26
分钟: 1575: 94500

(4)综合计算年月日时分秒的差值

Period类和Duration类的综合使用

注意点:注意取模

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.Period;public class main {public static void main(String[] args) {// 定义两个时间点LocalDateTime start = LocalDateTime.of(2025, 6, 1, 14, 30, 0);LocalDateTime end = LocalDateTime.of(2025, 6, 8, 18, 45, 30);// 计算日期差(年月日)Period period = Period.between(start.toLocalDate(), end.toLocalDate());// 计算时分秒差(从完整的时间差中提取)Duration duration = Duration.between(start, end);// 计算日期差(年、月、天)int years = period.getYears();int months = period.getMonths();int days = period.getDays();// 计算时间差(时、分、秒)long hours = duration.toHours() % 24; // 剩余小时long minutes = duration.toMinutes() % 60; // 剩余分钟long seconds = duration.getSeconds() % 60; // 剩余秒数// 输出日期差(年、月、天)System.out.println("日期差: " + years + "年 " + months + "月 " + days + "天");// 输出时间差(时、分、秒)System.out.println("时分秒差: " + hours + "小时 " + minutes + "分钟 " + seconds + "秒");}// 运行结果
日期差: 007天
时分秒差: 4小时 15分钟 30

四、时间戳:代码示例

import java.time.Instant;
import java.util.Date;public class main {public static void main(String[] args) {// 获取当前时间戳Instant instant_now = Instant.now();System.out.println("instant_now:" + instant_now);// Instant --> DateDate date = Date.from(instant_now);System.out.println("date:" + date);// Date --> instantInstant date_to_instant = date.toInstant();System.out.println(date_to_instant);}
}

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

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

相关文章

C++基础进阶:函数、内联函数与Lambda函数详解

引言 在C编程的旅程中,函数是构建复杂程序的基本单元。它们像乐高积木一样,允许我们将代码分解成更小、更易于管理的部分。今天,我们将深入探讨C中的三种重要函数类型:普通函数、内联函数以及Lambda函数。掌握它们,将…

从Node.js到React/Vue3:流式输出技术的全栈实现指南

本文将从底层原理到工程实践,完整解析如何使用Node.js后端结合React和Vue3前端实现流式输出功能,涵盖协议选择、性能优化、错误处理等关键细节,并通过真实场景案例演示完整开发流程。 一、流式输出的核心原理与协议选择 1.1 流式传输的底层机…

AT2401C中科微2.4g芯片PA

作为无线通信系统的核心模块,射频前端芯片通过整合功率放大器(PA)、滤波器、开关和低噪声放大器(LNA)等关键组件,成为保障通信质量、降低功耗及维持信号稳定的决定性因素。 AT2401C是一款面向2.4GHz无线通信…

Linux安装jdk、tomcat

1、安装jdk sudo yum install -y java-1.8.0-openjdk-devel碰到的问题:/var/run/yum.pid 已被锁定 Another app is currently holding the yum lock; waiting for it to exit… https://blog.csdn.net/u013669912/article/details/131259156 参考&#…

在本地电脑中部署阿里 Qwen3 大模型及连接到 Elasticsearch

在今天的文章中,我将参考文章 “使用 Elastic 和 LM Studio 的 Herding Llama 3.1” 来部署 Qwen3 大模型。据测评,这是一个非常不错的大模型。我们今天尝试使用 LM Studio 来对它进行部署,并详细描述如何结合 Elasticsearch 来对它进行使用。…

【设计模式】2.策略模式

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 商场收银软件为例 1. 基础版 total 0def click_ok(price,num):tot price * numtotal totprint(合计:, total)增加打折 total 0def cli…

c++中的输入输出流(标准IO,文件IO,字符串IO)

目录 &#xff08;1&#xff09;I/O概述 I/O分类 不同I/O的继承关系 不同I/O对应的头文件 &#xff08;2&#xff09;iostream 标准I/O流 iostream头文件中的IO流对象 iostream头文件中重载了<<和>> 缓冲区示意图 标准输入流 cin用法 cin&#xff1a;按空…

人工智能学习06-循环

人工智能学习概述—快手视频 人工智能学习06-循环—快手视频

【电路】阻抗匹配

&#x1f4dd; 阻抗匹配 一、什么是阻抗匹配&#xff1f; 阻抗匹配&#xff08;Impedance Matching&#xff09;是指在电子系统中&#xff0c;为了实现最大功率传输或最小信号反射&#xff0c;使信号源、传输线与负载之间的阻抗达到一种“匹配”状态的技术。 研究对象&#x…

【vue】Uniapp 打包Android 文件选择上传问题详解~

需求 uniapp兼容android app&#xff0c;pc&#xff0c;h5的文件选择并上传功能。 需要支持拍照和相册选择&#xff0c;以及选择其他类型文件上传~ 实践过程和问题 开始使用uni-file-picker组件 以为很顺利&#xff0c;android模拟器测试…… 忽略了平台兼容性提示~&#…

Python:操作 Excel 格式化

🔧Python 操作 Excel 格式化完整指南(openpyxl 与 xlsxwriter 双方案) 在数据处理和报表自动化中,Python 是一把利器,尤其是配合 Excel 文件的读写与格式化处理。本篇将详细介绍两大主流库: openpyxl:适合读取与修改现有 Excel 文件xlsxwriter:适合创建新文件并进行复…

Prompt Enginering(提示工程)先进技术

前沿 CoT&#xff08;Chain-of-Thought&#xff09;和 ReACT&#xff08;Reasoning and Acting&#xff09;是两种先进的 Prompt Engineering&#xff08;提示工程&#xff09; 技术&#xff0c;旨在提升大语言模型&#xff08;LLM&#xff09;的推理、规划和执行能力。 CoT&a…

【C++系列】模板类型特例化

1. C模板类型特例化介绍 ​​定义​​&#xff1a;模板类型特例化&#xff08;Template Specialization&#xff09;是C中为模板的特定类型提供定制实现的机制&#xff0c;允许开发者对通用模板无法处理的特殊类型进行优化或特殊处理。 ​​产生标准​​&#xff1a; C98/03…

AI数据分析在体育中的应用:技术与实践

在现代体育竞技领域&#xff0c;"数据驱动"已不再是一个遥远的概念。尤其随着人工智能&#xff08;AI&#xff09;和大数据分析的不断成熟&#xff0c;从职业俱乐部到赛事直播平台&#xff0c;从运动员训练到球迷观赛体验&#xff0c;AI正以前所未有的方式渗透并改变…

计数思想-众数

11203-众数 题目描述(Description) 众数是指在一组数据中&#xff0c;出现次数最多的数。例如&#xff1a;1, 1, 3 中出现次数最多的数为 1&#xff0c;则众数为 1。 给定一组数&#xff0c;你能求出众数吗&#xff1f; 输入格式(Format Input) 第 1 行输入一个整数 n (1 &…

【Go语言基础【20】】Go的包与工程

文章目录 零、概述一、包基础1、包的核心作用2、包的声明与结构2.1、 包声明&#xff08;Package Declaration&#xff09;2.2、 包的目录结构&#xff08;工程视角&#xff09; 3、包的导入与调用3.1、导入包&#xff08;Import Packages&#xff09;3.2、 调用包成员3.3、 导…

《C++初阶之入门基础》【命名空间 + 输入输出 + 缺省参数 + 函数重载】

【命名空间 输入&输出 缺省参数 函数重载】目录 前言&#xff1a;---------------hello world---------------比较C语言和C的第一个程序&#xff1a;hello word ---------------命名空间---------------什么是命名空间&#xff1f;怎么使用命名空间&#xff1f;怎么定义…

java综合项目开发一课一得

文章目录 Java 综合项目课程学习&#xff1a;探索与成长之路一、课程初体验&#xff1a;从理论走向实践&#xff08;一&#xff09;系统学习 Java 核心理论知识&#xff08;二&#xff09;开启首个实践项目 —— 图书管理系统 二、项目攻坚&#xff1a;挑战与突破&#xff08;一…

JuiceFS v1.3-Beta2:集成 Apache Ranger,实现更精细化的权限控制

在大数据场景中&#xff0c;文件系统和应用组件的权限管理至关重要。在最新发布的 JuiceFS 社区版 v1.3-Beta 2 中&#xff0c;JuiceFS 引入了与 Apache Ranger 的集成&#xff0c;提供了更为灵活和细粒度的权限控制解决方案。 本文将介绍 JuiceFS 社区版如何与 Apache Ranger…

6月8日day48打卡

随机函数与广播机制 知识点回顾&#xff1a; 随机张量的生成&#xff1a;torch.randn函数卷积和池化的计算公式&#xff08;可以不掌握&#xff0c;会自动计算的&#xff09;pytorch的广播机制&#xff1a;加法和乘法的广播机制 ps&#xff1a;numpy运算也有类似的广播机制&…