JDK8之前的时间API
Date类
- 代表的是日期和时间
Date
类构造方法:
public Date()
: 封装此刻的时间public Date(long date)
: 根据传入的毫秒值来封装时间
Date
类成员方法:
public long getTime()
: 获取时间原点, 到时间对象所经历过的毫秒值public void setTime(long time)
: 根据传入的毫秒值来封装时间
Date now = new Date();
System.out.println(now);
System.out.println(now.getTime()); // 1710896936602
Date time = new Date(5000L);
System.out.println(time);
System.out.println(time.getTime()); // 5000
SimpleDateFormat类
- 用于日期格式化
关于SimpleDateFormat
SimpleDateFormat
代表什么,有什么作用?- 可以把日期对象格式化成我们想要的形式;
- 可以把字符串的时间形式解析成date日期对象。
SimpleDateFormat
的对象如何创建?public SimpleDateFormat(String pattern)
- simpledateformat 格式化,以及解析时间的方法是哪些?
public final String format(Date d)
: 格式化日期对象public Date parse(String source)
: 解析字符串时间
Calendar类
- 代表的是系统此刻时间对应的日历,通过它可以单独获取,修改时间中的年,月,日,时,分,秒等。
- 创建对象:
Calendar
是一个抽象类,不能直接创建对象
Calendar
类常用方法
Calendar
常用成员方法
- public int get(int field) : 根据传入的字段, 获取时间值.
常用字段:
Calendar.YEAR
Calendar.MONTH
月份取出之后, 需要+1
Calendar.DAY_OF_MONTH
Calendar.DAY_OF_WEEK
星期获取出来, 需要查表
日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
- public void set(int field, int value) : 为指定的字段设置时间值
- public void set(int year, int month, int date) : 指定年月日
- public abstract void add(int field, int amount) : 为给定的日历字段添加或减去指定的时间量
public static void main(String[] args) {
Calendar now = Calendar.getInstance();
now.add(Calendar.YEAR, 2);
System.out.println(now.get(Calendar.YEAR));
}
private static void updateMethod() {
Calendar now = Calendar.getInstance();
now.set(Calendar.YEAR, 2008);
now.set(2008, 7, 8);
System.out.println(now.get(Calendar.YEAR));
System.out.println(now.get(Calendar.MONTH) + 1);
System.out.println(now.get(Calendar.DAY_OF_MONTH));
}
private static void method() {
char[] week = {' ', '日', '一', '二', '三', '四', '五', '六'};
// 0 1 2 3 4 5 6 7
// 获取Calendar对象, 此刻的时间
Calendar now = Calendar.getInstance();
// 获取指定的时间(年, 月, 日...)
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH);
int day = now.get(Calendar.DAY_OF_MONTH);
int index = now.get(Calendar.DAY_OF_WEEK);
System.out.println(year);
System.out.println(month + 1);
System.out.println(day);
System.out.println(week[index]);
}
JDK8之后的时间API
LocalDateTime
LocalDate
: 代表本地日期(年,月,日,星期)
LocalTime
: 代表本地时间(时, 分,秒,纳秒)
LocalDateTime
: 代表本地日期,时间(年,月,日,星期,时,分,秒,纳秒)
获取对象
获取年月日时分秒相关的方法
LocalDateTime time = LocalDateTime.now();
LocalDateTime ldt = LocalDateTime.of(2008, 8, 8, 11, 11, 11);
System.out.println(time);
System.out.println(ldt);
int year = time.getYear();
int month = time.getMonthValue();
int day = time.getDayOfMonth();
int week = time.getDayOfWeek().getValue();
int hour = time.getHour();
int minute = time.getMinute();
int second = time.getSecond();
System.out.println(year);
System.out.println(month);
System.out.println(day);
System.out.println(week);
System.out.println(hour);
System.out.println(minute);
System.out.println(second);
修改年月日时分秒相关的方法
LocalDateTime
转LocalDate
和LocalTime
DateTimeFormatter类
用于时间的格式化和解析
对象的获取 :
static DateTimeFormatter ofPattern
(格式) : 获取格式对象
格式化 :
String format
(时间对象) : 按照指定方式格式化
解析 :
LocalDateTime.parse
(“解析字符串”, 格式化对象);
LocalDate.parse
(“解析字符串”, 格式化对象);
LocalTime.parse
(“解析字符串”, 格式化对象);
//获取此刻的时间,进行格式化
LocalDate now = LocalDate.now();
//获取格式化对象
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年M月d日");
//格式化
System.out.println(formatter.format(now));
//解析
String time = "2008年8月18日";
LocalDate date = LocalDate.parse(time, formatter);
System.out.println(date);
ZoneId类
Instent时间戳
- 用于表示时间的对象,类似之前所学习的
Date
ZonedDataTime带时区的时间对象
// 获取当前时间的ZonedDateTime对象
ZonedDateTime now = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
System.out.println(now);
// 获取指定时间的ZonedDateTime对象
ZonedDateTime.of(2008, 8, 8, 8, 8, 8, 8, ZoneId.of("Asia/Shanghai"));
工具类
System.out.println("相差的年数:" + ChronoUnit.YEARS.between(birthDate, today));
System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(birthDate, today));
System.out.println("相差的周数:" + ChronoUnit.WEEKS.between(birthDate, today));
System.out.println("相差的天数:" + ChronoUnit.DAYS.between(birthDate, today));
System.out.println("相差的时数:" + ChronoUnit.HOURS.between(birthDate, today));
System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(birthDate, today));
System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(birthDate, today));
System.out.println("相差的毫秒数:" + ChronoUnit.MILLIS.between(birthDate, today));
System.out.println("相差的微秒数:" + ChronoUnit.MICROS.between(birthDate, today));
System.out.println("相差的纳秒数:" + ChronoUnit.NANOS.between(birthDate, today));
System.out.println("相差的半天数:" + ChronoUnit.HALF_DAYS.between(birthDate, today));
System.out.println("相差的十年数:" + ChronoUnit.DECADES.between(birthDate, today));
System.out.println("相差的世纪(百年)数:" + ChronoUnit.CENTURIES.between(birthDate, today));
System.out.println("相差的千年数:" + ChronoUnit.MILLENNIA.between(birthDate, today));
System.out.println("相差的纪元数:" + ChronoUnit.ERAS.between(birthDate, today));
Test
System.out.println("请输入您的生日:");
String birthday = new Scanner(System.in).nextLine();
//1. 准备时间格式化对象, 用于解析
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年M月d日");
//2. 解析时间字符串
LocalDate birthdayDate = LocalDate.parse(birthday, formatter);
//3, 获取今天的时间
LocalDate now = LocalDate.now();
//4. 计算
long age = ChronoUnit.YEARS.between(birthdayDate, now);
System.out.println("您的年龄:" + age);