09_常用类_日期

Date

代表当前系统时间

  • 构造器

    构造器 说明
    public Date() 创建一个Date对象,代表的是系统当前此刻日期时间
    public Date(long time) 把时间毫秒值转换成Date日期对象
  • 常用方法

    名称 说明
    public long getTime() 返回从1970年1月1日 00:00:00走到此刻的总的毫秒数
    public void setTime(long time) 设置日期对象的时间为当前时间毫秒值对应的时间

SimpleDateFormat

代表简单日期格式化,可以用来把日期时间格式化成为我们想要的字符串格式。

  • 构造器

    构造器 说明
    public SimpleDateFormat(String pattern) 创建简单日期格式化对象,并封装格式化的形式信息
  • 常用方法

    格式化方法 说明
    public final String format(Date date) 将日期格式化成日期/时间字符串
    public final String format(Object time) 将时间毫秒值式化成日期/时间字符串
    public Date parse(String source) 从给定字符串的开始解析文本以生成日期

Calendar

Calendar代表了系统此刻日期对应的日历对象。
Calendar是一个抽象类,不能直接创建对象

获取实例方法:

方法名 说明
public static Calendar getInstance() 获取当前日历对象

其他常用方法:

方法名 说明
public int get(int field) 取日期中的某个字段信息。
public void set(int field,int value) 修改日历的某个字段信息。
public void add(int field,int amount) 为某个字段增加/减少指定的值
public final Date getTime() 拿到此刻日期对象。
public long getTimeInMillis() 拿到此刻时间毫秒值

field为Calendar的静态成员变量,包括Calendar.YEAR/MONTH等等。

JDK8新增的日期类型------------

LocalDate:不包含具体时间的日期。

LocalTime:不含日期的时间。

LocalDateTime:包含了日期及时间。

Instant:代表的是时间戳。

DateTimeFormatter 用于做时间的格式化和解析的

Duration:用于计算两个“时间”间隔

Period:用于计算两个“日期”间隔

LocalDate/LocalTime/LocalDateTime

分别表示日期、时间、日期时间对象,他们的类的实例是不可变的对象。

  • 获取实例API:
方法名 说明
public static Xxxx now(); 静态方法,根据当前时间创建对象 LocaDate localDate = LocalDate.now();
LocalTime llocalTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
public static Xxxx of(…); 静态方法,指定日期/时间创建对象 LocalDate localDate1 = LocalDate.of(2099,11,11);
LocalTime localTime1 = LocalTime.of(11, 11, 11);
LocalDateTime localDateTime1 = LocalDateTime.of(2020, 10, 6, 13, 23, 43);
  • 获取信息的API:
方法名 说明
public int geYear() 获取年
public int getMonthValue() 获取月份(1-12)
Public int getDayOfMonth() 获取月中第几天乘法
Public int getDayOfYear() 获取年中第几天
Public DayOfWeek getDayOfWeek() 获取星期
  • LocalDateTime的转换API
方法名 说明
public LocalDate toLocalDate() 转换成一个LocalDate对象
public LocalTime toLocalTime() 转换成一个LocalTime对象
  • 修改API

    这些方法返回的是一个新的实例引用,因为LocalDateTime 、LocalDate 、LocalTime 都是不可变的

方法名 说明
public LocalDate toLocalDate() 转换成一个LocalDate对象
public LocalTime toLocalTime() 转换成一个LocalTime对象

Instant

时间戳。由一个静态的工厂方法now()可以返回当前时间戳。

时间戳是包含日期和时间的,与java.util.Date很类似,事实上Instant就是类似JDK8 以前的Date,可以和Date互相转换

Instant instant = Instant.now();
System.out.println("当前时间戳是:" + instant);

Date date = Date.from(instant);
System.out.println("当前时间戳是:" + date);

instant = date.toInstant();
System.out.println(instant);

DateTimeFormtter

在JDK8中,引入了一个全新的日期与时间格式器DateTimeFormatter。

可以与Local类日期正反调用:

LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);//2021-03-01T15:09:17.444190900

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String ldtStr = ldt.format(dtf);
System.out.println(ldtStr);//2021-03-01 15:09:17

String ldtStr1 = dtf.format(ldt);
System.out.println(ldtStr1);//2021-03-01 15:09:17

Period

可用来计算日期间隔

通过between方法计算差异,再通过getYears(),getMonths() 和 getDays() 来获取结果。

LocalDate today = LocalDate.now();
System.out.println(today);     // 2021-03-01
LocalDate birthDate = LocalDate.of(1995, 1, 11);
System.out.println(birthDate); // 1995-01-11
Period period = Period.between(birthDate, today);
System.out.printf("年龄 : %d 年 %d 月 %d 日", period.getYears(), period.getMonths(), period.getDays());

Duration

用来计算时间间隔。

可用于 LocalDateTime 之间的比较,也可用于 Instant 之间的比较

LocalDateTime today = LocalDateTime.now();
System.out.println(today);
LocalDateTime birthDate = LocalDateTime.of(1990,10,1,10,50,30);
System.out.println(birthDate);

Duration duration = Duration.between(birthDate, today);//第二个参数减第一个参数
System.out.println(duration.toDays());//两个时间差的天数
System.out.println(duration.toHours());//两个时间差的小时数
System.out.println(duration.toMinutes());//两个时间差的分钟数
System.out.println(duration.toMillis());//两个时间差的毫秒数
System.out.println(duration.toNanos());//两个时间差的纳秒数

ChronoUnit

用于计算特定单位的时间差,可以用于比较所有的时间单位。

LocalDateTime today = LocalDateTime.now();
System.out.println(today);
LocalDateTime birthDate = LocalDateTime.of(1990,10,1,10,50,30);
System.out.println(birthDate);

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));
posted @ 2023-07-06 17:13  水木夏  阅读(14)  评论(0编辑  收藏  举报