工具类-Date

计算机时间原点

世界计算机时间原点:Thu Jan 01 00:00:00 CST 1970
北京时间原点:Thu Jan 01 08:00:00 CST 1970 (H+8)

Date类

无参构造方法
Date无参构造方法等价System时间戳

Date parameters = new Date();

// 底层:无参构造
public Date() {
        this(System.currentTimeMillis());
}

打印结果:
Sun Sep 05 18:23:52 CST 2021
当前计算机时间

有参构造方法

Date date1 = new Date(long date);

// 底层:有参构造
private transient long fastTime;

public Date(long date) {
        fastTime = date;
}

public String toString() {
        // "EEE MMM dd HH:mm:ss zzz yyyy";
        BaseCalendar.Date date = normalize();
        StringBuilder sb = new StringBuilder(28);
        int index = date.getDayOfWeek();
        if (index == BaseCalendar.SUNDAY) {
            index = 8;
        }
        convertToAbbr(sb, wtb[index]).append(' ');                        // EEE
        convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' ');  // MMM
        CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd

        CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':');   // HH
        CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
        CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss
        TimeZone zi = date.getZone();
        if (zi != null) {
            sb.append(zi.getDisplayName(date.isDaylightTime(), TimeZone.SHORT, Locale.US)); // zzz
        } else {
            sb.append("GMT");
        }
        sb.append(' ').append(date.getYear());  // yyyy
        return sb.toString();
    }

打印结果
Thu Jan 01 08:00:00 CST 1970
时间原点+北京东八区时差+有参毫秒值

Setter方法
对当前date对象进行时间增加
Getter方法
获取date Long类型毫秒值

SimpleDateForm

有参构造方法
定义日期时间格式,进行解析,或进行格式化

// 有参构造方法(yMd 雅蠛蝶 Hms 毫秒值)
SimpleDateFormat simpleDateFormat = new 
SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

// 解析:String->Date
Date parseDate = simpleDateFormat.parse(String source);
// 格式化:Date->String
String formateStr = simpleDateFormat.format(Date date);

注意:date对象是单例的,如果两个date对象,后面的date将会覆盖之前的date

Jdk 1.8 新日期类(不适用new)

LocalDateTime日期时间 | LocalDate日期 | LocalTime 时间
新的格式化器:DateTimeFormatter代替SimpleDateFormater

静态方法

// 获取当前电脑时间
LocalDateTime now = LocalDateTime.now();

// 自定义时间点
LocalDateTime of LocalDateTime.of(int year, Month month, int dayOfMonth, int hour, int minute, int second)

打印结果:
2021-09-05T18:49:47.568
当前计算机时间,比Date的成员方法计算的秒值更精确

解析:
LocalDateTime.parse(dateStr, dateTimeFormatter);
String解析为dateTimeFormatter

成员方法

获取对象元素内容:
localDateTime.get*() 获取此对象的年、月、日、时、分、秒

类型转换:
localDateTime.toLocalDate() 转换获取LocalDate对象
localDateTime.toLocalTime() 转换获取LocalTime对象

格式化:
localDateTime.format(dateTimeFormatter)
dateTimeFormatter格式化为String

DateTimeFormatter类 格式化器

静态方法

// 定制格式模板
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");

仅定制日期时间格式

LocalDateTime修改方法

成员方法

增加时间plus*()
既可以添加也可以减少

减少时间minus*()
既可以添加也可以减少,正数- 负数+

替换时间with*
时间间隔操作对象
period时期 Date之间间隔

Period类 (localDate) 周期

静态方法

between(start,end) 获取两个Date元素只差
打印结果:P标记 绝对相差 PT8780H18M50.505S

成员方法

get*() 获取 相对y M d

toTotalMonths() [ 绝对M ]

Duration类 (localTime 或 localDateTime) 持续时间

注意异常:UnsupportedTemporalTypeException 不支持的Temporal接口实现类型异常
原因:不能使用localDate对象

打印标记:
相对 相差 P1Y4M4D

静态方法

between(start,end) 获取两个Time元素只差

成员方法

to*()获取 [ 绝对H m s d ]

Period类与Duration类

绝对差规律to*()方法,相对差方法get*()方法
关于坑:使用Period.between()只有一个绝对差方法

上一篇:一道算法题04


下一篇:2021-09-07