计算机时间原点
世界计算机时间原点: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()只有一个绝对差方法