当前位置: 首页 > 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组件…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...