时间API

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类

  • 用于日期格式化

image.png

关于SimpleDateFormat
  1. SimpleDateFormat 代表什么,有什么作用?
    • 可以把日期对象格式化成我们想要的形式;
    • 可以把字符串的时间形式解析成date日期对象。
  2. SimpleDateFormat 的对象如何创建?
    • public SimpleDateFormat(String pattern)
  3. simpledateformat 格式化,以及解析时间的方法是哪些?
    • public final String format(Date d): 格式化日期对象
    • public Date parse(String source): 解析字符串时间

Calendar类

  • 代表的是系统此刻时间对应的日历,通过它可以单独获取,修改时间中的年,月,日,时,分,秒等。
  • 创建对象:Calendar是一个抽象类,不能直接创建对象

image.png

Calendar类常用方法

image.png

Calendar常用成员方法
  1. public int get(int field) : 根据传入的字段, 获取时间值.

常用字段:
Calendar.YEAR
Calendar.MONTH 月份取出之后, 需要+1
Calendar.DAY_OF_MONTH
Calendar.DAY_OF_WEEK 星期获取出来, 需要查表

1234567
  1. public void set(int field, int value) : 为指定的字段设置时间值
  2. public void set(int year, int month, int date) : 指定年月日
  3. 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

image.png
image.png

LocalDateTime

LocalDate: 代表本地日期(年,月,日,星期)
LocalTime: 代表本地时间(时, 分,秒,纳秒)
LocalDateTime: 代表本地日期,时间(年,月,日,星期,时,分,秒,纳秒)

获取对象

image.png

获取年月日时分秒相关的方法

image.png

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);
修改年月日时分秒相关的方法

image.png
image.png

LocalDateTimeLocalDateLocalTime

image.png

DateTimeFormatter类

用于时间的格式化和解析
对象的获取 :

static DateTimeFormatter ofPattern(格式) : 获取格式对象

格式化 :

String format(时间对象) : 按照指定方式格式化

解析 :

LocalDateTime.parse(“解析字符串”, 格式化对象);
LocalDate.parse(“解析字符串”, 格式化对象);
LocalTime.parse(“解析字符串”, 格式化对象);
image.png

//获取此刻的时间,进行格式化
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类

image.png

Instent时间戳

  • 用于表示时间的对象,类似之前所学习的Date

image.png

ZonedDataTime带时区的时间对象

image.png

// 获取当前时间的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"));

工具类

image.png

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);
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值