Java三代日期类

文章目录

  • 日期类
    • 第一代日期类
    • 第二代日期类
    • 第三代日期类
      • LocalDateTime方法
      • LocalDateTime格式化
      • 日期与时间戳的转换
        • Date转换为时间戳
        • 时间戳转换为Date

日期类

在Java中,有三代日期类:java.util.Datejava.util.Calendarjava.time包下的日期类。这三代日期类在不同的Java版本中引入和改进,每一代都提供了更强大和更易于使用的日期和时间处理功能。

第一代日期类

第一代日期类:java.util.Date
java.util.Date是Java最早引入的日期类,它表示从1970年1月1日开始的毫秒数。尽管它提供了基本的日期和时间操作方法,但它在设计上存在一些问题。其中一个主要问题是它的可变性,即一旦创建了一个Date对象,就无法更改其值。此外,它的大部分方法已被标记为过时,不推荐使用。

第二代日期类

第二代日期类:java.util.Calendar
java.util.Calendar是Java 1.1版本引入的日期类,用于弥补Date类的不足。Calendar类提供了更多的日期和时间操作方法,如获取特定日期的年、月、日、时、分、秒等。它还提供了一些用于日期和时间计算的方法,如添加或减去特定的时间单位。但是,Calendar类的设计也存在一些问题。它的月份从0开始,即0表示一月,11表示十二月,这在使用时容易引起混淆。此外,Calendar类也不是线程安全的。

第三代日期类

第三代日期类:java.time包下的日期类
java.time包是在Java 8中引入的,它提供了一组全新的日期和时间类,用于取代旧的DateCalendar类。这些新的日期类是不可变的,线程安全的,并且提供了更加清晰和易于使用的API。主要的日期类包括:

  • LocalDate:表示日期,如年、月、日。
  • LocalTime:表示时间,如时、分、秒。
  • LocalDateTime:表示日期和时间,如年、月、日、时、分、秒。
  • ZonedDateTime:表示带有时区的日期和时间。
  • Instant:表示时间戳,精确到纳秒级别。
  • Duration:表示时间的持续时间。
  • Period:表示日期的持续时间。

示例代码:

public class Test1 {public static void main(String[] args) {// 创建 LocalDate 对象表示当前日期(年月日)LocalDate currentDate = LocalDate.now();System.out.println("当前日期: " + currentDate);// 创建 LocalTime 对象表示当前时间(时分秒)LocalTime currentTime = LocalTime.now();System.out.println("当前时间: " + currentTime);// 创建 LocalDateTime 对象表示当前日期和时间(年月日时分秒)LocalDateTime currentDateTime = LocalDateTime.now();System.out.println("当前日期和时间: " + currentDateTime);// 创建带有时区的 ZonedDateTime 对象ZonedDateTime zonedDateTime = ZonedDateTime.now();System.out.println("当前日期和时间(带时区): " + zonedDateTime);// 创建 Instant 对象表示当前时间戳Instant instant = Instant.now();System.out.println("当前时间戳: " + instant);// 转换为以毫秒为单位的时间戳long epochMilli = instant.toEpochMilli(); System.out.println("毫秒时间戳: " + epochMilli);// 计算两个时间之间的持续时间LocalDateTime startDateTime = LocalDateTime.of(2024, 1, 1, 0, 0, 0);LocalDateTime endDateTime = LocalDateTime.of(2024, 1, 1, 12, 0, 0);Duration duration = Duration.between(startDateTime, endDateTime);System.out.println("时间间隔: " + duration);// 计算两个日期之间的持续时间LocalDate startDate = LocalDate.of(2024, 1, 1);LocalDate endDate = LocalDate.of(2024, 12, 31);Period period = Period.between(startDate, endDate);System.out.println("日期间隔: " + period);}
}

输出:

当前日期: 2024-03-07
当前时间: 09:19:30.221607600
当前日期和时间: 2024-03-07T09:19:30.221607600
当前日期和时间(带时区): 2024-03-07T09:19:30.222605800+08:00[Asia/Shanghai]
当前时间戳: 2024-03-07T01:19:30.222605800Z
毫秒时间戳: 1709775409194
时间间隔: PT12H
日期间隔: P11M30D

LocalDateTime方法

LocalDateTime currentDateTime = LocalDateTime.now();System.out.println("年=" + currentDateTime.getYear());
System.out.println("月=" + currentDateTime.getMonth());
System.out.println("月=" + currentDateTime.getMonthValue());
System.out.println("日=" + currentDateTime.getDayOfMonth());
System.out.println("时=" + currentDateTime.getHour());
System.out.println("分=" + currentDateTime.getMinute());
System.out.println("秒=" + currentDateTime.getSecond());

输出:

=2024=MARCH=3=7=9=22=14

LocalDateTime格式化

LocalDateTime currentDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 格式化LocalDateTime
System.out.println("格式化后:"+currentDateTime.format(formatter));

输出:

格式化后:2024-03-07 09:23:22

日期与时间戳的转换

Date转换为时间戳
LocalDateTime dateTime = LocalDateTime.now();
long timestamp = dateTime.toEpochSecond(ZoneOffset.UTC);
System.out.println("LocalDateTime转化为时间戳:"+timestamp);

输出:

Date转化为时间戳:2024-03-07T01:37:43.387Z
时间戳转换为Date
Instant now = Instant.now();
Date date = Date.from(now);
System.out.println("时间戳转换为Date:"+now);

输出:

时间戳转换为Date:2024-03-07T01:39:23.786778200Z

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

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

相关文章

【Redis】RedisTemplate序列化传输数据

使用自定义的序列化器 使用RedisTemplate默认的序列化器发送数据,会将key全都当成Object处理,从而按照对象的方式转成json格式发送到服务器,这样会导致两个问题。一是不方便阅读,二是会大大浪费内存。因此,建议自定义…

Linux之线程控制

目录 一、POSIX线程库 二、线程的创建 三、线程等待 四、线程终止 五、分离线程 六、线程ID:pthread_t 1、获取线程ID 2、pthread_t 七、线程局部存储:__thread 一、POSIX线程库 由于Linux下的线程并没有独立特有的结构,所以Linux并…

Qt设置右键菜单无效customContextMenuRequested(const QPoint pos)

问题代码: void MainWindow::onCustomContextMenuRequested(const QPoint &pos) {QTreeWidgetItem *item ui->treeWidget->itemAt(pos);if (item){QMenu menu(ui->treeWidget);TreeNodeType nodeType (TreeNodeType)item->data(0, Qt::UserRole …

LightDB24.1 oracle_fdw支持服务端GBK编码

功能介绍 oracle_fdw是一个PG的插件,用于连接oracle数据库,由于原生PG不支持服务端GBK编码,所以原生的oracle_fdw也不支持服务端GBK编码。在LightDB23.3中支持了服务端GBK编码,导致在GBK编码的数据库中使用oracle_fdw时报错。 Li…

python82-Python的函数高级内容之使用函数变量

Python的函数是“一等公民”,因此函数本身也是一个对象,函数既可用于赋值,也可用作其他函数的参数,还可作为其他函数的返回值。 使用函数变量 Python的函数也是一种值:所有函数都是function对象,这意味着可以把函数本…

es6的新特性

ECMAScript 6(也称为 ES6 或 ECMAScript 2015)是 JavaScript 的一个重要更新版本,引入了许多新的语法和功能,以提高开发效率和代码可读性。以下是 ES6 中一些比较常见和重要的新特性: let 和 const 声明: l…

一篇搞定mysql数据库基础

目录 一、MySQL具体的特点 1.关系型数据库(RDBMS): 2.MySQL是一个“客户端-服务器”结构的程序 Q1:服务器能不能知道客户端什么时候发请求?? Q2:服务器是只给一个客户端提供服务吗?? 二、M…

LeetCode 80.删除有序数组中的重复项 II

目录标题 删除有序数组中的重复项 II题目解题思路实现代码代码讲解总结删除有序数组中的重复项 II 题目 解题思路 慢指针指向满足条件的数字的末尾,快指针遍历原数组。 并且用一个变量记录当前末尾数字出现了几次,防止超过两次。最后返回维护慢指针的结果+1即可。 实现代…

聊聊pytho中的函数

Python中的函数 一、Python中函数的作用与使用步骤 1、为什么需要函数 在Python实际开发中,我们使用函数的目的只有一个“让我们的代码可以被重复使用” 函数的作用有两个: ① 代码重用(代码重复使用) ② 模块化编程&#x…

ChatGPT用不了,发了没反应,终于解决了!

大概在几天前的早上,ChatGPT突然就用不了。 这完全打乱了我的工作节奏!!!(所以,我就去玩了) 用不了的具体表现是,你输入内容之后,内容消失,按钮变灰&#xff…

flask流式响应

Flask提供了Response对象来处理HTTP响应。可以通过在视图函数中返回一个Response对象,然后使用Response对象的iter方法来实现将数据流式传输到客户端。 1.1 循环生成迭代数据块 from flask import Flask, Response, stream_with_context, requestapp Flask(__nam…

3488.最短路径floyd、并查集

N个城市,标号从 0 到 N−1,M 条道路,第 K 条道路(K 从 0开始)的长度为 2K,求编号为 0的城市到其他城市的最短距离。 输入格式 第一行两个正整数 N,M,表示有 N 个城市,M 条道路。接下…

上位机图像处理和嵌入式模块部署(qmacvisual条形码识别)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们谈到过,qmacvisual提供功能的方式主要就是插件导入。目前,大家如果能正确地把qmacvisual编译出来的话,…

Constrained Iterative LQR 自动驾驶中使用的经典控制算法

Motion planning 运动规划在自动驾驶领域是一个比较有挑战的部分。它既要接受来自上层的行为理解和决策的输出,也要考虑一个包含道路结构和感知所检测到的所有障碍物状态的动态世界模型。最终生成一个满足安全性和可行性约束并且具有理想驾驶体验的轨迹。 通常,motion plann…

快速入门:JS对象/BOM/DOM/事件监听

本贴介绍JS相对进阶的知识,对于JavaScript的基础语法,本文不再赘述~ 一.JavaScript对象 1.Array数组对象 定义 var arr new Array(1,2,3); var arr[1,2,3]; 访问 arr[0]1; Js数组类似Java中的集合,长度,类型都可以改变。 如…

git IDEA的分支合并时的冲突问题总结,merge和rebase的区别

git IDEA的分支合并时的冲突问题总结,merge和rebase的区别_the merge branch should be-CSDN博客 项目实战—IDEA中分析Git Merge 和 Rebase的区别_idea rebase和merge区别-CSDN博客

【异常处理】verilator安装时出现异常 make: *** [Makefile:195: verilator_gantt.1] Error 13

在ubuntu中安装verilator工具时执行make出现该报错。 当我出现这个报错的时候我一脸懵逼,因为网上找不到相关解决办法。 后来想到我的verilator是从github上下载zip,然后解压后传到ubuntu上的,windows上解压我记得会把-替换成_,这…

【Qt学习笔记】(二)--第一个程序“Hello World”(学习Qt中程序的运行、发布、编译过程)

声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。    因为我个人对Qt也是有一些需求,所以开设本专栏进行学习,希望大家可以一起学习,共同进步。   这篇博客将从一个 He…

【数据库系统概论】第2章:关系数据库

文章目录 0. 前言2.1 关系数据结构及形式化定义2.1.1关系2.1.2 关系模式 2.2 关系操作2.3 关系的完整性2.4 关系代数 0. 前言 关系数据库系统是支持关系模型的数据库系统。第一章初步介绍了关系模型及其基本术语。本章将深入介绍关系模型。 按照数据模型的三个要素,…

开发知识点-python-Tornado框架

介绍 Tornado是一个基于Python语言的高性能Web框架和异步网络库,它专注于提供快速、可扩展和易于使用的网络服务。由于其出色的性能和灵活的设计,Tornado被广泛用于构建高性能的Web应用程序、实时Web服务、长连接的实时通信以及网络爬虫等领域。 Torna…