java中的日期类之间有啥区别与联系??

本文深入探讨了Java中日期和时间API的演变,从util.Date、sql.Date到Calendar,再到Java 8引入的LocalDate、LocalTime和LocalDateTime。通过示例展示了如何获取当前日期和时间,以及如何设置特定日期和时间。同时,文章还揭示了这些类之间的关系和使用细节,包括构造方法、of()方法的工作原理。

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

前几天刚刚写了关于java中的日期的类—util.Date、sql.Date,Calendar
这三个类之间有啥区别与联系?
首先Date是第一批关于时间的类,后来出现了Calendar;

其次 util.Date是sql.Date的父类,

public class Date extends java.util.Date{}

然后是Calendar,他是一个抽象类,也有自己的子类-- GregorianCalendar

public class GregorianCalendar extends Calendar {}

再说一下具体的细节,
util.Date 有无参构造,而sql.Date没有,sql.Date的构造可以接收字符串
然后经过转型可以转换为util.Date类型

Calendar 由于是抽象类,实例化要靠子类,但是还有一个方法可以得到Calendar的实例 getInstance();

一般情况下日期是不允许被修改的,于是乎后来又有了 LocalDate、LocalDateime,等关于日期的类;
今天借此机会捣鼓一下子;

获取当前的日期,时间,日期+时间

package com.Date.Test;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * @Auther: GavinLim
 * @Date: 2021/7/10 - 07 - 10 - 10:29
 * @Description: com.Date.Test
 * @version: 1.0
 */
public class Test {
    public static void main(String[] args) {
   // now()--获取当前的日期,时间,日期+时间
        LocalDate localDate=LocalDate.now();
        System.out.println(localDate);//2021-07-10
        LocalTime localTime= LocalTime.now();
        System.out.println(localTime);//10:50:02.481155100
        LocalDateTime localDateTime= LocalDateTime.now();
        System.out.println(localDateTime);//2021-07-10T10:50:02.482155200

    }
}

在这里插入图片描述

now()方法源代码—

 public static LocalTime now() {
        return now(Clock.systemDefaultZone());
    }//返回系统默认的时区

systemDefaultZone()
该方法返回一个时钟,该时钟使用最佳可用系统时钟返回时钟的当前时刻,其中返回时钟的Zone是默认时区

public static Clock systemDefaultZone() {
        return new SystemClock(ZoneId.systemDefault());
    }//返回一个系统时钟的对象,

 public static ZoneId systemDefault() {
        return TimeZone.getDefault().toZoneId();
    }

设置指定的日期,时间,日期+时间

在这里插入图片描述

javapublic class Test {
    public static void main(String[] args) {

        Month month = Month.APRIL;
        LocalDate.of(2021, 7, 10);
        LocalDate localDate = LocalDate.of(2021, month, 10);

        System.out.println(localDate);
        LocalTime.of(12, 12, 12, 456);
        LocalTime localTime = LocalTime.of(11, 14, 56);
        System.out.println(localTime);
        LocalDateTime localDateTime = LocalDateTime.of(1999, 12, 4, 12, 45, 56, 456);

        System.out.println(localDateTime);
    }
}

结果—

2021-04-10
11:14:56
1999-12-04T12:45:56.000000456

of()方法的源码–

public static LocalDate of(int year, int month, int dayOfMonth) {
        YEAR.checkValidValue(year);
        MONTH_OF_YEAR.checkValidValue(month);
        DAY_OF_MONTH.checkValidValue(dayOfMonth);
        return create(year, month, dayOfMonth);
    }

//返回值为LocalDate,来看一下create方法
 private static LocalTime create(int hour, int minute, int second, int nanoOfSecond) {
        if ((minute | second | nanoOfSecond) == 0) {
            return HOURS[hour];
        }
        return new LocalTime(hour, minute, second, nanoOfSecond);
    }

获取我们想要的数据—下面只列了几种,

public class Test {
    public static void main(String[] args) {

        Month month = Month.APRIL;
        LocalDate.of(2021, 7, 10);
        LocalDate localDate = LocalDate.of(2021, month, 10);

        System.out.println(localDate);
        LocalTime.of(12, 12, 12, 456);
        LocalTime localTime = LocalTime.of(11, 14, 56);
        System.out.println(localTime);
        LocalDateTime localDateTime = LocalDateTime.of(1999, 12, 4, 12, 45, 56, 456);

        System.out.println(localDateTime);
        System.out.println(localDate.getYear());
        System.out.println(localDateTime.getHour());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CodeMartain

祝:生活蒸蒸日上!

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

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

打赏作者

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

抵扣说明:

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

余额充值