Java 日期类

本文介绍了JDK1.8引入的新日期时间API,强调了旧版API的问题,并详细讲解了如何使用java.time包中的LocalDate,LocalTime,LocalDateTime类创建和处理日期对象,以及DateTimeFormatter类进行日期格式化的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、日期类

在程序开发中经常会遇到日期类的操作,在JDK1.8之前的版本中,所有关于时间和日期的API在使用上都存在缺陷。

  1. 易用性差,时间的计算方式烦琐。
  2. 不是线程安全的。

基于以上问题,JDK1.8引入了一套全新的时间日期API,借助新的API可以用更简洁的方法处理时间和日期。

二、创建日期对象

在JDK1.8中,日期和时间的类都位于java.time包中,它是新的Java日期/时间API的基础包,这些类都是不可变的、线程安全的,在绝大多数情况下,这些类能够有效地处理一些公共的需求。java.time包中表示日期的常用类如以下表格:

描述
LocalDate表示日期(年/月/日),不包含时间,如2024-03-23
LocalTime表示时间(时/分/秒/毫秒),不包含日期,如23:10:24
LocalDateTime表示日期和时间(年/月/日/时/分/秒/毫秒),如2024-03-23 23:10:24

LocalDate类、LocalTime类、LocalDateTime类的实例是不可变的对象,它提供了简单的日期或时间,并不包含时间信息,也不包含与时区相关的信息。日期类的通用方法如以下表格:

方法描述
日期类 now()静态方法,根据当前时间创建对象,返回日期对象
日期类 of(int year,Month month,int dayOfMonth)静态方法,根据指定日期/时间创建日期类对象,如LocalDate.of(2024,Month.APRIL,4)
Month getMonth()获取月份,返回Month,是一个表示月份的枚举
int getDayOfMonth()返回当前日期类对象的月份天数
int getYear()返回当前日期类对象的年份
日期类 plusDays()、日期类 plusDays()、日期类 plusMonths()、日期类 plusYear()在指定日期的基础上添加天数、周数、月数、年数,返回日期类对象

表格中的“日期类”指LocalDate、LocalTime、LocalDateTime等类型。运用这些类,可以实现获取日期时间类对象。例如,获取当前日期或时间的代码如下实例:

LocalDate localDate=LocalDate.now();  //获取当前日期
LocalTime localTime=LocalTime.now();  //获取当前时间

三、日期格式化

有时需要按照定义的格式输出系统时间,这就需要使用DateTimeFormatter类的相关方法进行日期格式化处理,该类位于java.time.format包中。日期类中的format()方法用于将日期格式化字符串,该方法接受一个DateTimeFormatter对象,除此之外,DateTimeFormatter类的format()方法也可以实现日期格式化。

代码示例:

DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy年MM月dd日");
//两种格式化方式
String str1=localDate.format(formatter);
String str2=formatter.format(localDate);

在以上代码中,ofPattern()方法用于指定日期格式。参数为格式字符串,该方法的作用是指定日期输出格式。
根据当前日期,计算农场下次播种时间和收割时间,要求如下:

  1. 使用不同格式输出当前日期,如"yyyy年MM月dd日 HH:mm:ss" “yyyy-MM-dd”。
  2. 分别提取当前日期对应的年、月、日信息并输出。
  3. 输入当前日期距离下次播种还有几个月,计算并输出下次播种时间。
  4. 输入收割时间,并输出到控制台。

代码示例:

public class TimeTest {
    public static void main(String[] args) {
        //1、获取现在时间
        LocalDateTime today=LocalDateTime.now();
        //2、创建格式化器
        DateTimeFormatter fm1= DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
        DateTimeFormatter fm2=DateTimeFormatter.ofPattern("yyyy-MM-dd");
        //3、将日期格式化为字符串
        String str1=today.format(fm1);
        String str2=today.format(fm2);
        System.out.println("当前日期(日期+时间):"+str1+"。");
        System.out.println("当前日期:"+str2+"。");
        //4、提取日期中的年、月、日信息
        System.out.println("年:"+today.getYear()+" 月:"+today.getMonth()+" 日:"+today.getDayOfMonth());
        //5、根据时隔时间输出日期
        System.out.println("距离下次播种大约还有几个月?(1~12间的整数):");
        Scanner input=new Scanner(System.in);
        LocalDateTime future=today.plusMonths(input.nextLong());
        String str3=future.format(fm2);
        System.out.println("下次播种时间约为:"+str3+"。");
        //6、根据输入时间输出
        System.out.println("请输入计划开始收割日期(格式:yyyy-MM-dd):");
        LocalDate ld=LocalDate.parse(input.next());//将字符串转换为日期
        String str4=ld.format(fm2);
        System.out.println("收割开始日期为"+str4+",预祝好收成!");
    }
}

运行结果:

当前日期(日期+时间):2024年03月23日 23:36:35。
当前日期:2024-03-23。
年:2024 月:MARCH 日:23
距离下次播种大约还有几个月?(1~12间的整数):
4
下次播种时间约为:2024-07-23。
请输入计划开始收割日期(格式:yyyy-MM-dd):
2024-07-23
收割开始日期为2024-07-23,预祝好收成!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NoloveisGod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值