Java学习笔记Day15
时间相关类
JDK7前时间相关类
时间的相关知识点
- 全世界的时间,有一个统一的计算标准
- 格林尼治时间/格林威治时间(Greenwich Mean Time)简称 GMT
- 计算核心:地球自转一天是24小时,太阳直射时为正午12点
- 原子钟:利用铯原子的震动频率计算出来的时间,作为世界标准时间(UTC)
- 中国标准时间:世界标准时间+8小时
- 时间单位换算:
- 1秒 = 1000毫秒
- 1毫秒 = 1000微秒
- 1微秒 = 1000纳秒
Date时间类
Date类是一个JDK写好的Javabean类,用来描述时间,精确到毫秒
利用空参构造创建的对象,默认表示系统当前时间
利用有参构造创建的对象,表示指定的时间
方法名 | 说明 |
---|---|
public Date() | 创建Date对象,表示当前时间 |
public Date(long date) | 创建Date对象,表示指定时间 |
public void setTime(long time) | 设置/修改毫秒值 |
public long getTime() | 获取时间对象的毫秒值 |
// 1.创建对象表示一个时间
Date d1 = new Date();
System.out.println(d1);// 2.创建对象表示一个指定时间
Date d2 = new Date(0L);
System.out.println(d2);// 3.修改时间
d2.setTime(1000L);
System.out.println(d2);// 4.获取当前时间的毫秒值
long time = d2.getTime();
System.out.println(time);
SimpleDateFormat类
- 格式化:把时间变成我们喜欢的格式
- 解析:把字符串表示的时间变成Date对象
方法名 | 说明 |
---|---|
public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认格式 |
public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat,使用指定格式 |
public final String format(Date date) | 格式化(日期对象->字符串) |
public Date parse(String source) | 解析(字符串->日期对象) |
格式化的时间形式的常用模式对应关系
- y 年
- M 月
- d 日
- H 时
- m 分
- s 秒
例如:2023-11-11 13:27:26 yyyy-MM-dd HH:mm:ss
// 1.利用空参构造创建SimpleDateFormat对象,默认格式
SimpleDateFormat sdf1 = new SimpleDateFormat();
Date d1 = new Date(0L);
String str1 = sdf1.format(d1);
System.out.println(str1); // 1970/1/1 上午8:00// 2.利用带参构造创建SimpleDateFormat对象,指定格式
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str2 = sdf2.format(d1);
System.out.println(str2); // 1970年1月1日 08:00:00
Calendar类
- Calendar代表了系统当前时间的日历对象,可以单独修改,获取时间中的年、月、日
- 细节:Calender时一个抽象类,不能直接创建对象。
获取Calendar日历类对象的方法
public static Calendar getInstance() 获取当前时间的日历对象
常用方法
方法名 | 说明 |
---|---|
public final Date getTime() | 获取日期对象 |
public final setTime(Date date) | 给日历设置日期对象 |
public long getTimeInMillis() | 拿到时间毫秒值 |
public void setTimeInMillis(long millis) | 给日历设置时间毫秒值 |
public int get(int field) | 取日历中的某个字段信息 |
public void set(int field,int value) | 修改日历的某个字段信息 |
public void add(int filed,int amount) | 为某个字段增加/减少指定的值 |
细节:
- Calender是一个抽象类,不能直接new,而是通过一个静态方法获取到子类
- 底层原理:会根据系统的不同失去来获取不同的日历对象,默认表示当前的时间,会把时间中的纪元,年,月,日,时,分,秒,星期,等等的都放到一个数组当中
- 月份:范围是0~11,如果获取出来的是0,那么实际上是1月
- 星期:在老外眼里,星期日是一周的第一天,(1 星期日 2 星期一…)
JDK8新增时间类
Date类
ZoneId时区
方法名 | 说明 |
---|---|
static Set getAvailableZoneIds() | 获取Java中所支持的所有时区 |
static ZoneId systemDefault() | 获取系统默认时区 |
static ZoneId of(String zoneId) | 获取一个指定时区 |
Instant时间戳
方法名 | 说明 |
---|---|
static Instant now() | 获取当前时间的Instant对象(标准时间) |
static Instant ofXxxx(long epochMilli) | 根据(秒/毫秒/纳秒)获取Instant对象 |
ZonedDateTime atZone(ZoneId zone) | 指定时区 |
boolean isXxx(Instant otherInstant) | 判断系列的方法 |
Instant minusXxx(long millisToSubtract) | 减少时间系列的方法 |
Instant plusXxx(long millisToSubtracr) | 增加时间系列的方法 |
ZonedDateTime
带时区的时间
方法名 | 说明 |
---|---|
static ZonedDateTime now() | 获取当前时间的ZonedDateTime对象 |
static ZonedDateTime ofXxxx( 。。。) | 获取指定时间的ZonedDateTime对象 |
ZonedDateTime withXxx(时间) | 修改时间系统的方法 |
ZonedDateTime minusXxx(时间) | 减少时间系列的方法 |
ZonedDateTime plusXxx(时间) | 增加时间系列的方法 |
DateTimeFormatter
用于实践的格式化和解析
方法名 | 说明 |
---|---|
static DateTimeFormatter ofPattern(格式) | 获取格式对象 |
String format(时间对象) | 按照指定方式格式化 |
LocalDate、LocalTime、LocalDateTime
方法名 | 说明 |
---|---|
static XXX now() | 获取当前时间的对象 |
static XXX of(。。。) | 获取指定时间的对象 |
get开头方法 | 获取日历中的年、月、日、时、分、秒等 |
isBefore,isAfter | 比较两个LocalDate |
with开头的 | 修改时间系列的方法 |
minus开头的 | 减少时间系列的方法 |
plus开头的 | 增加时间系列的方法 |