3.3. 日期与时间类(Date、Calendar、LocalDate等)

news/2024/11/23 13:39:48/

在Java中,我们经常需要处理日期和时间。Java提供了一些类来帮助我们完成这些任务,如DateCalendarLocalDateLocalTimeLocalDateTimeZonedDateTime等。我们将分别介绍这些类,并给出相应的示例。

1. Date类

Date类是Java提供的一个表示日期和时间的类。但是,由于设计上的缺陷,许多方法已经被废弃。因此,我们更推荐使用Calendar类和Java 8中引入的新的日期时间API。

以下是Date类的一些常用方法:

  • Date():构造一个表示当前日期和时间的Date对象。
  • getTime():返回自1970年1月1日0时0分0秒以来的毫秒数。

2. Calendar类

Calendar类是一个抽象类,它提供了一些方法来操作日期和时间。Calendar类的子类如GregorianCalendar,它表示公历日期。Calendar类的常用方法有:

  • getInstance():返回一个表示当前日期和时间的Calendar对象。
  • get(int field):返回指定字段的值。
  • set(int field, int value):设置指定字段的值。
  • add(int field, int amount):给指定字段添加指定的值。
  • getTime():返回表示Calendar对象的日期和时间的Date对象。

以下是Calendar类的一些常量:

  • YEAR:年
  • MONTH:月
  • DATE:日
  • HOUR:小时(12小时制)
  • HOUR_OF_DAY:小时(24小时制)
  • MINUTE:分
  • SECOND:秒

3. LocalDate、LocalTime、LocalDateTime和ZonedDateTime类

Java 8引入了新的日期时间API,包括LocalDateLocalTimeLocalDateTimeZonedDateTime等类。这些类是不可变的,线程安全的,并且设计上更符合实际需求。

以下是这些类的一些常用方法:

  • now():返回表示当前日期或时间的对象。
  • of(...):根据指定的参数创建对象。
  • plusDays(long daysToAdd):返回增加指定天数后的对象。
  • minusDays(long daysToSubtract):返回减去指定天数后的对象。
  • plusHours(long hoursToAdd):返回增加指定小时数后的对象。
  • minusHours(long hoursToSubtract):返回减去指定小时数后的对象。
  • format(DateTimeFormatter formatter):使用指定的格式化器将对象格式化为字符串。

4. 示例

下面是一个使用日期和时间类的示例:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;public class Main {public static void main(String[] args) {// 使用Date类Date date = new Date();System.out.println("当前日期和时间:" + date);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("格式化后的日期和时间:" + sdf.format(date));// 使用Calendar类Calendar calendar = Calendar.getInstance();System.out.println("年:" + calendar.get(Calendar.YEAR));System.out.println("月:" + (calendar.get(Calendar.MONTH) + 1)); // 月份从0开始,所以需要加1System.out.println("日:" + calendar.get(Calendar.DATE));System.out.println("小时:" + calendar.get(Calendar.HOUR_OF_DAY));System.out.println("分钟:" + calendar.get(Calendar.MINUTE));System.out.println("秒:" + calendar.get(Calendar.SECOND));// 使用LocalDate、LocalTime和LocalDateTime类LocalDate localDate = LocalDate.now();LocalTime localTime = LocalTime.now();LocalDateTime localDateTime = LocalDateTime.now();System.out.println("当前日期:" + localDate);System.out.println("当前时间:" +localTime);System.out.println("当前日期和时间:" + localDateTime);// 使用ZonedDateTime类ZonedDateTime zonedDateTime = ZonedDateTime.now();System.out.println("当前日期和时间(带时区):" + zonedDateTime);// 格式化日期和时间DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");System.out.println("格式化后的日期和时间:" + localDateTime.format(formatter));// 日期和时间的计算LocalDate tomorrow = localDate.plusDays(1);System.out.println("明天的日期:" + tomorrow);LocalTime oneHourLater = localTime.plusHours(1);System.out.println("一小时后的时间:" + oneHourLater);LocalDateTime oneWeekLater = localDateTime.plusDays(7);System.out.println("一周后的日期和时间:" + oneWeekLater);}
}

执行以上代码,将输出类似如下的结果:

当前日期和时间:Tue May 30 15:23:45 CST 2023
格式化后的日期和时间:2023-05-30 15:23:45
年:2023
月:5
日:30
小时:15
分钟:23
秒:45
当前日期:2023-05-30
当前时间:15:23:45.123456789
当前日期和时间:2023-05-30T15:23:45.123456789
当前日期和时间(带时区):2023-05-30T15:23:45.123456789+08:00[Asia/Shanghai]
格式化后的日期和时间:2023-05-30 15:23:45
明天的日期:2023-05-31
一小时后的时间:16:23:45.123456789
一周后的日期和时间:2023-06-06T15:23:45.123456789

以上就是Java常用类库中的日期与时间类的简介和示例。希望这些内容能帮助你理解和使用这些类。如果有任何疑问,请随时提问,我会尽力帮助你。

file

file

推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g


http://www.ppmy.cn/news/106769.html

相关文章

Spring Boot 如何处理分布式事务?

Spring Boot分布式事务处理 分布式事务是指跨多个数据库或服务的事务,它需要确保所有参与者都能以一致的方式处理事务。在微服务架构中,由于每个服务都有自己的数据库,因此实现分布式事务非常重要。在本文中,我们将介绍如何在Spr…

UnityVR--插件1--新版InputSystem

目录 新版的InputSystem 安装新版InputSystem插件 配置新的InputSystem 在项目中配置新版输入方式实现移动和开火 添加并绑定移动事件 添加并绑定开火事件 总结(啰嗦几句) 新版的InputSystem 在最初的Unity系统中,只有键盘、鼠标、操作…

JS逆向-加密参数定位方法总结

前言 本文是该专栏的第50篇,后面会持续分享python爬虫干货知识,记得关注。 爬虫工程师在处理爬虫项目的时候,难免会遇到需要JS逆向的平台。那么对于需要JS逆向的网站,其加密参数需要怎样快速去定位呢?笔者将目前常用的几种方法进行了总结,总的来说,不同的定位方法其逻辑…

灵活使用Postman环境变量和全局变量,提高接口测试效率!

目录 前言: 环境变量和全局变量的概念 环境变量和全局变量的使用方法 1. 定义变量 2. 使用变量 环境变量和全局变量的实例代码 变量的继承和覆盖 变量的动态设置 总结: 前言: Postman是一个流行的API开发和接口测试工具,…

全国科技工作者日和神州十六号腾飞祝词

全国科技工作者日: 在这个特别的日子里,我们向全国所有的科技工作者致以最诚挚的祝福和敬意。你们是推动国家科技进步的基石,是实现民族复兴的重要力量。你们日以继夜地辛勤工作,冒着生命危险探索科学的高峰,为祖国的…

Spring IOC相关注解运用——上篇

目录 前言 一、Component 二、Repository、Service、Controller 三、Scope 四、Autowired 五、Qualifier 六、Value 1. 直接设置固定的属性值 2. 获取配置文件中的属性值 3. 测试结果 往期专栏&文章相关导读 1. Maven系列专栏文章 2. Mybatis系列专栏文章 3.…

NRF52系列多个 base uuid 的问题,以client为例。

基础uuid知识 nordic的nrf sdk希望我们设置uuid的方式跟蓝牙技术联盟SIG的方式一样,也就是服务和特性的uuid是基于同一个base uuid修改产生的,比如base uuid是0x0000xxxx-0000-1000-8000-00805F9B34FB,那么服务和特性的128bit uuid就要基于此…

VSCode远程连接Ubuntu使用LLDB调试程序

VSCode已经具有远程开发的能力,可以使用SSH连接到Linux/MacOS进行远程开发,包括编译与调试,只需要安装Remote Development插件即可,如果想使用CMake管理项目,则需要将VSCode的CMake以及CMake Tools插件安装在远程机器上…