Java日期类

第一代日期类


DateSimpleDateFormat。前者获取时间,后者格式化时间形式。这两种类已经过时,但在开发中仍然可能用到。

构造器

Date();
//可以放一个时间戳,例如System.currentTimeMillis()
Date(long time);
//字符串参数应该为特定的日期格式,例如"yyyy-MM-dd"
SimpleDateFormat(String s);

具体的日期设置格式可参看下图

使用SimpleDateFormat对象就可以格式化日期,也可以将一个表示时间的字符串转换为Date

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String now = sdf.format(new Date());
Date nowtime = sdf.parse(now);

第二代日期类


Calendar类。本身是一个抽象类,这个类的构造器是受保护的,因此Calendar类提供了获取实例的方法。

代码演示如何使用

public class MyCalendar {
    public static void main(String[] args) {
        Calendar now = Calendar.getInstance();
        //这里直接打印now也可以,但显示一堆东西
        System.out.println(now.get(Calendar.YEAR));
        //从0开始计算
        System.out.println(now.get(Calendar.MONTH)+1);
        System.out.println(now.get(Calendar.DAY_OF_MONTH));
        System.out.println(now.get(Calendar.HOUR));
        System.out.println(now.get(Calendar.HOUR_OF_DAY));
        System.out.println(now.get(Calendar.MINUTE));
        System.out.println(now.get(Calendar.SECOND));
    }
}

注意:没有专门的格式Calendar的方法,需要程序员手动获取自动并且拼接。

第三代日期类


上述两种类一般不建议使用,因为它们的值可以被修改,并且线程不安全。而且Date从1900年开始计算。它们也不能处理闰秒(每隔两天,多出一秒)

Java 8新增加了三个类,它们都有各自的分工

  • LocalDate 表示日期
  • LocalTime 表示时间
  • LocalDateTime 表示日期时间

LocalDateTime


属于final类,无法被继承,构造器私有,只能使用静态方法创建对象。实际上,LocalDateTime的构造器包含了LocalDateLocalTime两个参数。

创建对象的静态方法

//获取系统时间
LocalDateTime.now();
//自定义日期
LocalDateTime.of();

获取日期时间各个组成部分的方式

依然使用get系列方法获得

获取对象副本

使用以with开头的方法

往前或往后计算日期

使用对应的plus或minus方法即可

LocalDateTimeLocalDateLocalTime的使用方法几乎相同,不一一赘述。

DateTimeFormatter


这个类可以对上述三种类的对象的表现形式格式化

使用方法

  1. 使用静态方法ofPattern(String s)创建DateTimeFormatter对象,然后使用这个对象的format方法对LocalDateTime对象格式化。
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(dtf.format(now));
//2022-11-19 11:00:00
  1. 使用预定义的静态对象,依然使用format进行格式化
LocalDateTime now = LocalDateTime.now();
System.out.println(DateTimeFormatter.ISO_LOCAL_DATE.format(now));
//2022-11-19

Instant


Instant是一个时间戳,可以将Instant转换为Date,也可以将Date转换为Instant
该类为final类,不可继承,并且构造器私有。

案例演示

Instant instant = Instant.now();
System.out.println(instant);
Date date = Date.from(instant);
System.out.println(date);
Instant toInstant = date.toInstant();
posted @ 2022-11-19 11:24  清巡  阅读(73)  评论(0编辑  收藏  举报