当前位置: 首页 > news >正文

04_使用API_日期和时间

JDK 8 之前传统的日期、时间

Date 类
  • 代表的是日期和时间
import java.util.Date;public class Test {public static void main(String[] args) {// 1. 创建一个Data对象,代表系统当前时间信息的Date d = new Date();System.out.println(d);  // 输出的是日期与当前的时间信息// 2. 拿到时间毫秒值long time = d.getTime();System.out.println(time);  // 输出毫秒值// 3. 把时间毫秒值转换成对象日期:2s之后的时间是多少time += 2 * 1000;  // 2 ms * 1000 == 2sDate d2 = new Date(time);// 4. 直接把日期对象的时间,通过setTime方法进行修改Date d3 = new Date();d3.setTime(time);System.out.println(d3);}
}
SimpleDateFormat 类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Test {public static void main(String[] args) throws ParseException {// 1. 准备一些时间Date d = new Date();System.out.println(d);  // 日期+时间long time = d.getTime();System.out.println(time);  // 时间毫秒值// 2. 格式化日期对象,和时间毫秒值SimpleDateFormat obj = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String res = obj.format(d);String res2 = obj.format(time);System.out.println(res);System.out.println(res2);// 3. 常见时间格式/**   y   年*   M   月*   d   日*   H   时*   m   分*   s   秒*   EEE 星期几*   a   上午/下午* */// 4. 将已被格式化的时间字符串,转变回原来的时间对象String dateStr = "2023--15-20 15:35:21";SimpleDateFormat obj2 = new SimpleDateFormat("yyyy--MM-dd HH:mm:ss");Date d2 = obj2.parse(dateStr);System.out.println(d2);  // 日期+时间}
}
Calendar 类
  • Calendar 代表的是系统此刻时间对应的日历
  • 通过它可以单独获取、修改时间中的年、月、日、时、分、秒等
import java.util.Calendar;
import java.util.Date;public class Test {public static void main(String[] args) {// 1. 得到系统此刻时间对应的日历对象Calendar obj = Calendar.getInstance();System.out.println(obj);// 2. 获取日历中的某个信息int year = obj.get(Calendar.YEAR);System.out.println(year);  // 输出年份int days = obj.get(Calendar.DAY_OF_YEAR);System.out.println(days);  // 一年365天中的第x天// 3. 拿到日历中记录的日期对象Date d = obj.getTime();System.out.println(d);// 4. 拿到时间毫秒值long time = obj.getTimeInMillis();System.out.println(time);// 5. 修改日历中的某个信息obj.set(Calendar.MONTH, 9);  // 月份是从0开始计算,所以这里是修改为10月System.out.println(obj.get(Calendar.MONTH));  // 9obj.set(Calendar.DAY_OF_YEAR, 250);  // 修改为一年中的第250天System.out.println(obj.get(Calendar.DAY_OF_YEAR));  // 250// 6. 为某个信息增加或者减少多少obj.add(Calendar.DAY_OF_YEAR, 100);obj.add(Calendar.DAY_OF_YEAR, -100);System.out.println(obj.get(Calendar.DAY_OF_YEAR));  // 250}
}

JDK 8 开始新增的日期、时间

它们的优点
  • 设计更合理,功能丰富,使用更方便
  • 都是不可变对象,修改后会返回新的时间对象,不会丢失最开始的时间
  • 线程安全
  • 能精确到毫秒、纳秒
LocalDate、LocalTime、LocalDateTime
  • LocalDate:代表本地日期(年、月、日、星期)
  • LocalTime:代表本地时间(时、分、秒、纳秒)
  • LocalDateTime:代表本地日期、时间(年、月、日、星期、时、分、秒、纳秒)
// LocalDateimport java.time.LocalDate;public class Test {public static void main(String[] args) {// 1. 获取本地日期对象(不可变对象)LocalDate date = LocalDate.now();System.out.println(date);  // 2023-11-24// 2. 获取日期对象中的信息int year = date.getYear();int month = date.getMonthValue();int day = date.getDayOfMonth();int dayOfYear = date.getDayOfYear();  // 一年365天中的第几天int dayOfWeek = date.getDayOfWeek().getValue();  // 星期几// 3. 修改信息(本质不是修改原来的,而是新建了一个对象)LocalDate newDate = date.withYear(2050);System.out.println(date);  // 2023-11-24System.out.println(newDate);  // 2050-11-24// 4. 把某个信息加(或者减)多少(本质不是修改原来的,而是新建了一个对象)LocalDate date1 = date.plusYears(10);LocalDate date2 = date.minusYears(10);// 5. 指定日期的LocalDate对象LocalDate date3 = LocalDate.of(2035, 10, 1);// 6. 判断2个日期对象,是否相等,在前还是在后System.out.println(date1.equals(date2));  // falseSystem.out.println(date1.isAfter(date2));  // trueSystem.out.println(date1.isBefore(date2));  // false}
}
// LocalTimeimport java.time.LocalTime;public class Test {public static void main(String[] args) {// 1. 获取本地时间对象(不可变对象)LocalTime time = LocalTime.now();System.out.println(time);  // 23:56:28.720309500// 2. 获取时间对象中的信息int hour = time.getHour();int minute = time.getMinute();int second = time.getSecond();int nano = time.getNano();  // 纳秒// 3. 修改信息(本质不是修改原来的,而是新建了一个对象)LocalTime time1 = time.withHour(8);// 4. 把某个信息加(或者减)多少(本质不是修改原来的,而是新建了一个对象)LocalTime time2 = time.plusHours(8);LocalTime time3 = time.minusHours(8);// 5. 指定时间的LocalTime对象LocalTime time4 = LocalTime.of(12, 15);// 6. 判断2个时间对象,是否相等,在前还是在后System.out.println(time1.equals(time2));System.out.println(time1.isAfter(time2));System.out.println(time1.isBefore(time2));}
}
// LocalDateTimeimport java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;public class Test {public static void main(String[] args) {LocalDateTime dateTime = LocalDateTime.now();System.out.println(dateTime);  // 2023-11-25T10:08:23.410530300// 1. 可以获取日期和时间的全部信息int year = dateTime.getYear();int month = dateTime.getMonthValue();int day = dateTime.getDayOfMonth();int dayOfYear = dateTime.getDayOfYear();int dayOfWeek = dateTime.getDayOfWeek().getValue();int hour = dateTime.getHour();int minute = dateTime.getMinute();int second = dateTime.getSecond();int nano = dateTime.getNano();// 2. 修改时间LocalDateTime dateTime1 = dateTime.withYear(2035);// 3. 加减LocalDateTime dateTime2 = dateTime.plusYears(5);LocalDateTime dateTime3 = dateTime.minusYears(5);// 4. 获取指定日期和时间的LocalDateTime对象LocalDateTime dateTime4 = LocalDateTime.of(2055, 6, 1, 12, 30, 15, 3000);System.out.println(dateTime4);  // 2055-06-01T12:30:15.000003// 5. 判断日期时间对象是否相等,在前还是在后System.out.println(dateTime1.equals(dateTime2));System.out.println(dateTime1.isAfter(dateTime2));System.out.println(dateTime1.isBefore(dateTime2));// 6. 可以把LocalDateTime对象,转为LocalDate和LocalTimeLocalDate date = dateTime.toLocalDate();LocalTime time = dateTime.toLocalTime();System.out.println(date);  // 2023-11-25System.out.println(time);  // 10:20:04.680774700}
}
时区
import java.time.Clock;
import java.time.ZoneId;
import java.time.ZonedDateTime;public class Test {public static void main(String[] args) {// 1. 获取系统默认的时区ZoneId obj = ZoneId.systemDefault();System.out.println(obj);  // GMT+08:00System.out.println(obj.getId());  // GMT+08:00// 2. 显示 Java 支持的全部时区 IdSystem.out.println(ZoneId.getAvailableZoneIds());  // [Asia/Aden, America/Cuiaba, Etc/GMT+9, Etc/GMT+8, Africa/Nairobi......]// 3. 把某个时区的id封装成ZoneId对象ZoneId obj1 = ZoneId.of("America/Cuiaba");// 4. 获取某个时区的ZonedDatetime对象ZonedDateTime obj2 = ZonedDateTime.now(obj1);System.out.println(obj2);  // 输出 America/Cuiaba 时区当前的时间,如下所示// 2023-11-24T22:50:05.534176500-04:00[America/Cuiaba]// 5. 获取世界标准时间ZonedDateTime obj3 =  ZonedDateTime.now(Clock.systemUTC());System.out.println(obj3);  // 2023-11-25T02:54:06.575812300Z// 6. 获取系统默认时区的ZonedDateTime对象ZonedDateTime obj4 = ZonedDateTime.now();System.out.println(obj4);  // 2023-11-25T10:55:46.410093200+08:00[GMT+08:00]}
}
Instant (时刻/时间戳)
  • 传统的 Date 类只能精确到毫秒,并且是可变对象
  • 新增的 Instant 类可以精确到纳秒,并且是不可变对象(推荐使用 Instant 替代 Date )
import java.time.Instant;public class Test {public static void main(String[] args) {// 1. 创建 Instant 的对象,获取此"刻"信息(该信息由两部分组成:"总秒数" + "不够1秒的纳秒数")Instant obj = Instant.now();System.out.println(obj);  // 2023-11-25T03:05:00.754167800Z// 2. 获取总秒数long second = obj.getEpochSecond();System.out.println(second);// 3. 获取纳秒数int nano = obj.getNano();System.out.println(nano);// 4. 其他基本操作,类比之前的方法,它们的方法有共通性,而且都是不可变对象Instant instant1 = Instant.now();Instant instant2 = Instant.now();System.out.println(instant1.equals(instant2));  // 判断是否相等System.out.println(instant1.isAfter(instant2));System.out.println(instant1.isBefore(instant2));Instant instant3 = instant1.plusSeconds(5);  // +5 秒Instant instant4 = instant1.minusSeconds(5);  // -5 秒}
}
DateTimeFormatter (日期时间格式化器)
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class Test {public static void main(String[] args) {// 1. 创建一个日期时间格式化器对象DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");// 2. 对时间进行格式化// 2.0 准备一个时间LocalDateTime dateTime = LocalDateTime.now();  // 创建日期时间对象System.out.println(dateTime);  // 输出该对象 2023-11-25T11:24:22.524304100// 2.1 方法一String str1 = formatter.format(dateTime);  // 格式化这个日期时间对象System.out.println(str1);  // 输出格式化后的结果 2023年11月25日 11:24:22// 2.2 方法二String str2 = dateTime.format(formatter);System.out.println(str2);  // 2023年11月25日 11:24:22// 4. 解析时间:一般使用 LocalDateTime 提供的解析方法来解析String str = "2023年11月25日 11:25:25";LocalDateTime obj = LocalDateTime.parse(str, formatter);System.out.println(obj);  // 2023-11-25T11:25:25}
}
Period(一段时期)

用于计算两个 LocalDate 对象相差的年数、月数、天数

import java.time.LocalDate;
import java.time.Period;public class Test {public static void main(String[] args) {LocalDate start = LocalDate.of(2030, 8, 6);LocalDate end = LocalDate.of(2030, 8, 20);// 1. 创建 Period 对象,封装两个日期对象Period obj = Period.between(start, end);// 2. 通过 Period 对象获取两个日期对象相差的信息System.out.println(obj.getYears());  // 0System.out.println(obj.getMonths());  // 0System.out.println(obj.getDays());  // 14}
}
Duration(持续时间)

用于计算两个时间对象相差的天数、小时数、分数、秒数、纳秒数;支持 LocalTime、LocalDateTime、Instant 等时间

import java.time.Duration;
import java.time.LocalDateTime;public class Test {public static void main(String[] args) {LocalDateTime start = LocalDateTime.of(2028, 5, 10, 12, 15, 30);LocalDateTime end = LocalDateTime.of(2028, 5, 25, 8, 0, 0);// 1. 得到 Duration 对象Duration obj = Duration.between(start, end);// 2. 获取两个时间对象间隔的信息System.out.println(obj.toDays());  // 间隔多少天System.out.println(obj.toHours());  // 间隔多少小时System.out.println(obj.toMinutes());  // 间隔多少分System.out.println(obj.toSeconds());  // 间隔多少秒System.out.println(obj.toMillis());  // 间隔多少毫秒System.out.println(obj.toNanos());  // 间隔多少纳秒}
}

相关文章:

04_使用API_日期和时间

JDK 8 之前传统的日期、时间 Date 类 代表的是日期和时间 import java.util.Date;public class Test {public static void main(String[] args) {// 1. 创建一个Data对象,代表系统当前时间信息的Date d new Date();System.out.println(d); // 输出的是日期与当…...

手动实现 git 的 git diff 功能

这是 git diff 后的效果,感觉挺简单的,不就是 比较新旧版本,新增了就用 "" 显示新加一行,删除了就用 "-" 显示删除一行,修改了一行就用 "-"、"" 显示将旧版本中的该行干掉了并…...

RabbitMQ之MQ的可靠性

文章目录 前言一、数据持久化交换机持久化队列持久化消息持久化 二、LazyQueue控制台配置Lazy模式代码配置Lazy模式更新已有队列为lazy模式 总结 前言 消息到达MQ以后,如果MQ不能及时保存,也会导致消息丢失,所以MQ的可靠性也非常重要。 一、…...

Navicat 技术指引 | 适用于 GaussDB 的查询编辑器

Navicat Premium(16.2.8 Windows版或以上) 已支持对 GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结构同步、协同合作、数据迁移等),这…...

Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署

JenkinsMavenGitlabTomcat 自动化构建打包、部署 1、环境需求 本帖针对的是Linux环境,Windows或其他系统也可借鉴。具体只讲述Jenkins配置以及整个流程的实现。 1.JDK(或JRE)及Java环境变量配置,我用的是JDK1.8.0_144&#xff0…...

(2023码蹄杯)省赛(初赛)第三场真题(原题)(题解+AC代码)

题目1&#xff1a;MC0227堆煤球 码题集OJ-堆煤球 (matiji.net) 思路&#xff1a; 1.i从l枚举到r,i是8的倍数就跳过&#xff0c;i不是8的倍数就用等差数列求和公式i(1i)/2,最后累加到答案中即可 AC_Code:C #include<bits/stdc.h> using namespace std;int main( ) {in…...

第十二章 : Spring Boot 日志框架详解

第十二章 : Spring Boot 日志框架详解 前言 本章知识重点:介绍了日志诞生背景,4种日志框架:Logback、Log4j、Log4j2和Slf4j的优劣势分析,以及重点介绍了log4j2的应用示例以及配置,以及日志框架应用中遇到常见的问题以及如何处理。 背景 Java日志框架的发展历程可以追…...

STM32 -Bin/Hex文件格式解析

文章目录 1. 概述2. Hex文件2.1 格式解析2.2 数据类型2.3 举例解析2.4 合并两个Hex文件方法 3. Bin文件3.1 生成方式3.2 合并多个Bin文件方法3.3 打开Bin文件方式3.4 和Hex文件比较 4 总结 1. 概述 Hex文件&#xff1a;它是单片机和嵌入式工程编译输出的一种常见的目标文件格式…...

【Java 进阶篇】Redis:打开缓存之门

介绍 Redis&#xff08;Remote Dictionary Server&#xff09;是一个高性能的键值对存储系统&#xff0c;被广泛用作缓存、消息中间件和数据库。它以其快速的读写能力、支持多种数据结构和丰富的功能而闻名。在这篇博客中&#xff0c;我们将深入了解Redis的概念、安装以及基本…...

Python与设计模式--享元模式

10-Python与设计模式–享元模式 一、网上咖啡选购平台 假设有一个网上咖啡选购平台&#xff0c;客户可以在该平台上下订单订购咖啡&#xff0c;平台会根据用户位置进行 线下配送。假设其咖啡对象构造如下&#xff1a; class Coffee:name price 0def __init__(self,name):se…...

亚马逊云科技向量数据库助力生成式AI成功落地实践探秘(二)

向量数据库选择哪种近似搜索算法&#xff0c;选择合适的集群规模以及集群设置调优对于知识库的读写性能也十分关键&#xff0c;主要需要考虑以下几个方面&#xff1a; 向量数据库算法选择 在 OpenSearch 里&#xff0c;提供了两种 k-NN 的算法&#xff1a;HNSW (Hierarchical…...

怎么当代课老师教学生

老师朋友们&#xff0c;有没有帮忙当过代课老师呢&#xff1f;或者&#xff0c;没当过的老师是不是对这种职业充满了好奇&#xff1f;让我来分享一下&#xff0c;当代课老师的日常是什么样的吧&#xff01; 备课 说起备课&#xff0c;那可是个大工程&#xff01;不过&#xff…...

『 MySQL数据库 』表的增删查改(CRUD)之表的数据插入及基本查询

文章目录 &#x1f4c2; Create(创建/新增)&#x1f4cc;全列插入与指定列插入&#x1f4cc;&#x1f4cc;单行数据插入与多行数据插入&#x1f4cc;&#x1f4cc;插入数据否则更新&#x1f4cc;&#x1f4cc;数据的替换&#x1f4cc; &#x1f4c2; Retrieve(查询)&#x1f4c…...

Vue中mvvm的作用

目录 模型表示应用程序的数据。在Vue.js中&#xff0c;它们是JavaScript对象。视图是用户界面。在Vue.js中&#xff0c;使用模板语法编写HTML的表示层。ViewModel是视图的抽象表示&#xff0c;负责处理用户输入的数据&#xff0c;并处理视图的数据绑定。ViewModel使用模型中的…...

基于springboot实现高校食堂移动预约点餐系统【项目源码】

基于springboot实现高校食堂移动预约点餐系统演示 Java语言简介 Java是由SUN公司推出&#xff0c;该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称&#xff0c;也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备…...

用element ui上传带参数的文件,并用flask接收

需求 网页需要实现上传一个csv文件&#xff0c;并携带两个表单的参数给后端 方法 上传组件 <el-uploadclass"upload-demo"dragaction"/upload" <!--要上传到的路由地址&#xff0c;跟flask路由函数对应-->accept".csv" <!--只接…...

[Android]使用Git将项目提交到GitHub

如果你的Mac还没有安装Git&#xff0c;你可以通过Homebrew来安装它&#xff1a; brew install git 方式一&#xff1a;终端管理 1.创建本地Git仓库 在项目的根目录下&#xff0c;打开终端&#xff08;Terminal&#xff09;并执行以下命令来初始化一个新的Git仓库&#xff1…...

python cv2.imread()和Image.open()的区别和联系

文章目录 1. cv2.imread()1.1 cv2.imread参数说明1.2 注意事项 2. Image.open()3. cv2.imread()与Image.open()相互转化3.1 cv2.imread()转成Image.open()&#xff1a;Image.fromarray()3.2 Image.open()转成cv2.imread()&#xff1a;np.array() 1. cv2.imread() cv2.imread()…...

hdlbits系列verilog解答(exams/m2014_q4i)-45

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 实现以下电路&#xff1a; 二、verilog源码 module top_module (output out);assign out 1b0;endmodule三、仿真结果 转载请注明出处&#xff01;...

flink源码分析之功能组件(二)-kubeclient

简介 本系列是flink源码分析的第二个系列,上一个《flink源码分析之集群与资源》分析集群与资源,本系列分析功能组件,kubeclient,rpc,心跳,高可用,slotpool,rest,metrics,future。其中kubeclient上一个系列介绍过,为了系列完整性,这里“copy”一下。 kubeclient组件…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...