我是靠谱客的博主 生动烧鹅,最近开发中收集的这篇文章主要介绍工具类-Date计算机时间原点Date类SimpleDateFormJdk 1.8 新日期类(不适用new)Demo,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

计算机时间原点

世界计算机时间原点: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

毫秒值
localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli()

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()只有一个绝对差方法

Demo

对字符串进行比较
比较器
冒泡排序
三元运算符

public int compare(Date date){
		//返回值是三目运算符:
		//如果年大于date的年返回值是1
		//否则年小于date的年返回值是-1
		//如果月大于date的月返回值是1
		//否则月小于date的月返回值是-1
		//如果日大于date的日返回值是1
		//如果日小于date的日返回值是-1
		//其他情况返回0
		return year > date.year ? 1
		:year < date.year ? -1
		:month > date.month ? 1
		:month < date.month ? -1
		:day > date.day ? 1
		:day < date.day ? -1 :0;
	}

最后

以上就是生动烧鹅为你收集整理的工具类-Date计算机时间原点Date类SimpleDateFormJdk 1.8 新日期类(不适用new)Demo的全部内容,希望文章能够帮你解决工具类-Date计算机时间原点Date类SimpleDateFormJdk 1.8 新日期类(不适用new)Demo所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部