第十章 Java 日期和时间

本文详细介绍了Java中日期和时间的处理,从java.util.Date类的实例化、API使用,到java.util.Calendar类的实例化和常用方法,再到java.time.LocalDateTime的使用和转换。内容包括日期的格式化、比较、转换,展示了不同类在处理日期时间方面的功能和差异。
摘要由CSDN通过智能技术生成

Java.util包中提供了许多工具类,包含集合框架事件模型日期时间设施、国际化的各种实用工具类(字符串标记生成器、随机数生成器和位数组、日期Date类、堆栈Stack类、向量Vector类等)。集合类、时间处理模式、日期时间工具等各类常用工具包。在软件开发过程中,这些工具类使用十分频繁。

一、Java.util.Date类

JDK提供的java.util包下,有一个Date类,该类的对象可以用来表示一个特定的瞬间,精确到毫秒。它为特定瞬间与一组诸如
YEAR,MONTH,DAY_OF_MONTH,HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获取下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元年(即格林尼治时间1970年1月1日00:00:00:000,格里高利历)的偏移量。

java.util.Date是最常用的日期时间处理类,且Date类是一个普通类。

1.1、java.util.Date类对象的实例化

java.util.Date类提供两个构造方法来实例化对象,分别为:

构造方法 构造方法说明 构造方法类型
Date() 使用当前日期和时间初始化Date对象 无参构造方法
Date(long date) 使用传入的long型参数初始化Date对象,该参数的数值应该代表以格林尼治时间的1970年1月1日零时零分零秒开始,到某一时刻所历经的毫秒值 含参构造方法

例1.创建无参和含参的Date对象

import java.util.Date;
public class Test1 {
   
    public static void main(String[] args) {
   
        Date date1 = new Date();// 使用无参构造方法,实例化的Date对象为当前的日期和时间
        System.out.println("date1 = " + date1);
        Date date2 = new Date(0);// 使用传入一个指定毫秒值的构造方法,实例化的Date对象为指定毫秒值代表的日期和时间
        System.out.println("date2 = " + date2);
    }}

执行输出结果:

date1 = Tue Oct 13 21:58:32 CST 2020
date2 = Thu Jan 01 08:00:00 CST 1970

解释:
本例中分别使用了java.util.Date类提供的两个构造方法来实例化对象
其一为无参的构造方法,实例化的对象为当前日期和时间;
其二为需要传入一个毫秒值的构造方法,本例中传入的毫秒值为0,故实例化的对象表示的时间为格林尼治时间的1970年1月1日零时零分零秒。

实际上,java.util.Date类的无参构造方法的实现中,也是调用了传入毫秒值的含参构造方法,代码如下:

public Date() {
    this(System.currentTimeMillis() ); }

上面的代码中,System.currentTimeMillis()可以获得以格林尼治时间的1970年1月1日零时零分零秒开始,到系统当前时间所历经的毫秒值。
观察本例中的执行输出结果,应该可以觉察到,java.util.Date类中重写了继承自java.lang.Object类的toString()方法,重写后,java.util.Date类的对象打印格式为:
星期英文缩写 月份英文缩写 当月第几天 时:分:秒 时区 年份

本例中的CST代表中国标准时间(China Standard Time UT+8:00),由于中国使用的时区为东8区,因此要比格林尼治时间早8个小时。

1.2、java.util.Date类中的常用API

java.util.Date类中的一些常用API如下:

方法 返回值类型 方法说明
getTime() long 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此Date象表示的毫秒数
setTime(long time) void 用自 1970 年 1 月 1 日 00:00:00 GMT以后毫秒数设置时间和日期
hashCode() int 返回此对象的哈希码值
toString() String 返回此对象的字符串形式
after(Date date) boolean 若当调用此方法的Date对象在指定日期之后返回true,否则返回false
before(Date date) boolean 若当调用此方法的Date对象在指定日期之前返回true,否则返回false
equals(Object date) boolean 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false
clone() Object 返回此对象的副本compareTo(Date anotherDate)

注意

  • Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。
  • String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串内容相同,返回的哈希码也相同。
  • Integer类,返回的哈希码就是Integer对象里所包含的那个整数的数值,例如Integer i1=new Integer(100),i1.hashCode的值就是100 。由此可见,2个一样大小的Integer对象,返回的哈希码也一样。

例2.Date类的常用API的使用

import java.util.Date;
public class Test2 {
   
    public static void main(String[] args) {
   
        Date date = new Date();
        // 使用setTime(long time)方法设置时间
        date.setTime((38 * 365 + 9 + 220) * 24 * 3600 * 1000L);
        // 打印getTime()方法获得的数值
        System.out.println("date.getTime() = " + date.getTime());
        // 打印时间,打印时会调用toString()方法
        System.out.println("date = " + date);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值