JAVA基础|常用API-JDK8之后新增的日期,时间

一. 为什么要学习新增的日期/时间API?

(图片来自黑马程序员)

二. LocalDate,LocalTime,LocalDateTime

代替Calendar

(一)获取对象的方案

方法名 示例
public static xxxx now(); 获取系统当前时间对应的该对象 LocalDate ld = LocalDate.now(); LocalTime lt = LocalTime.now(); LocalDateTime ldt = LocalDateTime.now();
public static xxxx of(......); 获取指定时间的对象 LocalDate localDate1 = LocalDate.of(2099,11,11); LocalTime localTime1 = LocalTime.of(9,8,59); LocalDateTime localDateTime1 = LocalDateTime.of(2025,11,16,14,30,01);

(二)常用方法

(图片来自黑马程序员)

(三)使用

1. 获取本地日期对象

LocalDate:

java 复制代码
LocalDate ld = LocalDate.now();
System.out.println(ld);

LocalTime:

java 复制代码
LocalTime lt = LocalTime.now();
System.out.println(lt);

2. 获取日期对象中的信息

LocalDate:

java 复制代码
int year = ld.getYear();    //年
int month = ld.getMonthValue(); //月(1-12)
int day = ld.getDayOfMonth();   //日
int dayOfYear = ld.getDayOfYear();  //一年中的第几天
int dayOfWeek = ld.getDayOfWeek().getValue();   //星期几

LocalTime:

java 复制代码
int hour = lt.getHour();
int minute = lt.getMinute();
int second = lt.getSecond();
int nano = lt.getNano();

3. 直接修改某个信息

这里和传统日期api就不一样咯,修改后会返回修改值,但是原始值是没有改变的。

LocalDate:

java 复制代码
public class Test1_LocalDate {
    public static void main(String[] args) {
        LocalDate ld = LocalDate.now();
        System.out.println(ld);

        LocalDate ld2 = ld.withYear(2099);
        System.out.println();
        System.out.println(ld);
        System.out.println(ld2);
    }
}

LocalTime:

java 复制代码
LocalTime lt2 = lt.withHour(10);
LocalTime lt2 = lt.withMinute(10);
LocalTime lt2 = lt.withSecond(10);
LocalTime lt2 = lt.withNano(10);

4. 把某个信息增减/减少多少

LocalDate:

java 复制代码
LocalDate ld3 = ld.plusDays(1);    //增加
LocalDate ld4 = ld.minusDays(2);    //减少

LocalTime:

java 复制代码
LocalTime lt3 = lt.plusHours(1);    //增加
LocalTime lt4 = lt.minusHours(2);    //减少

5.获取指定日期的对象

LocalDate:

java 复制代码
LocalDate ld5 = LocalDate.of(2022,12,12);

LocalTime:

java 复制代码
LocalTime lt1 = LocalTime.of(12,12,12);    //小时,分钟,秒

6. 判断两个日期对象,是否相等,在前还是在后

equals判断是否相等

isBefore判断ld1是否在ld2前面

isAfter判断ld1是否在ld2后面

返回true,false

java 复制代码
System.out.println(ld1.equals(ld2));
System.out.println(ld1.isBefore(ld2));
System.out.println(ld1.isAfter(ld2));

7.把LocalDateTime转换成LocalDate和LocalTime

java 复制代码
LocalDate ld = ldt.toLocalDate();
LOcalTime lt = ldt.toLocalTIme();

8.把LocalDate和LocalTime转换成LocalDateTime

java 复制代码
LocalDateTime ldt = LocalDateTime.of(ld,lt);

三. ZoneId,ZonedDateTime

代替Calendar

(一)说明

时区/带时区的时间

(图片来自黑马程序员)

(二)常用方法

(图片来自黑马程序员)

(三)使用

  1. 获取系统默认时区
java 复制代码
ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId.getId());

返回值为String类型

  1. 获取Java支持的全部时区ID
java 复制代码
System.out.println(ZoneId.getAvailableZoneIds())
  1. 把某个时区ID封装成一个ZoneID对象
java 复制代码
ZoneId zoneId1 = ZoneId.of("America/Los_Angeles");
  1. 通过ZoneId,使用ZonedDateTime来获取某个时区的ZonedDateTime对象
java 复制代码
ZonedDateTime now = ZonedDateTime.now(zoneId);
System.out.println(now);

获取世界标准时间(UTC):

java 复制代码
ZonedDateTime now1 = ZonedDateTime.now(Clock.systemUTC());
System.out.println(now1);

那如果不给now任何参数,她就会打印出系统当前时间,时区


四. Instant

一. 说明

Instant可以拿到从1970年1月1日到如今的总秒数,而LocalDateTime只能拿到不够1s的纳秒数

(二)使用

1. 创建Instant对象,获取此刻时间信息

java 复制代码
Instant now = Instant.now();

2. 获取总秒数

java 复制代码
long second = now.getEpochSecond();

3. 获取不够1秒的纳秒数

java 复制代码
int nano = now.getNano();

4. 增加,减少纳秒

java 复制代码
Instant instant = now.plusNanos(111);

五. DateTimeFormatter

(一)说明

SimpleDateFormat-线程不安全,而DateTimeFormatter线程安全

(二)常用方法

DateTimeFormatter:

方法名 说明
public static DateTimeFormatter of Pattern(时间格式) 获取格式化器对象
public String format(时间对象) 格式化时间

LocalDateTime提供的格式化,解析时间的方法:

方法名 说明
public String format(DateTimeFormatter formatter) 格式化时间
public static LocalDateTime parse(CharSequence text,DateTimeFormatter formatter) 解析时间

(三)使用

1. 格式化某个时间

方案一:

formatter.format(now) 正向格式化:拿格式化器去格式化时间

java 复制代码
public class Test3_DateTimeFormatter {
    public static void main(String[] args) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");

        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);

        String rs = formatter.format(now);
        System.out.println(rs);
    }
}

方案二:

now.format(formatter) 反向格式化:拿时间给格式化器格式化自己

java 复制代码
public class Test3_DateTimeFormatter {
    public static void main(String[] args) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");

        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);

        String rs = now.format(formatter);
        System.out.println(rs);
    }
}
  1. 解析时间

解析时间一般使用LoacalDateTime提供的解析方法来解析

java 复制代码
String dateStr = "2029年12月12日 12:12:11";
LocalDateTime ldt = LocalDateTime.parse(dateStr, formatter);
System.out.println(ldt);

六. Period,Duration

(一)说明

Period:可以用于计算两个LocalDate对象 相差的年数,月数,天数

Duration:可以用于计算两个时间对象相差的天数,小时数,分数,秒数,纳秒数;支持LocalTime,LocalDateTime,Instant等时间

(二)常用方法

Period:

方法名 说明
public static Period between(LocalDate start,LocalDate end) 传入2个日期对象,得到Period对象
public int getYears() 计算隔几年,并返回
public int getMonths() 计算隔几个月,并返回
public int getDays() 计算隔多少天,并返回

Duration:

方法名 说明
public static Duration between(开始时间对象1,截止时间对象2) 传入2个时间对象,得到Duration对象
public long toDays() 计算隔多少天,并返回
public long toHours() 计算隔多少小时,并返回
public long toMinutes() 计算隔多少分,并返回
public long toSeconds() 计算隔多少秒,并返回
public long toMillis() 计算隔多少毫秒,并返回
public long toNanos() 计算隔多少纳秒,并返回
相关推荐
神仙别闹26 分钟前
基于java的改良版超级玛丽小游戏
java
Dream_Snowar35 分钟前
速通Python 第三节
开发语言·python
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭1 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫1 小时前
泛型(2)
java
超爱吃士力架1 小时前
邀请逻辑
java·linux·后端
南宫生1 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石1 小时前
12/21java基础
java
高山我梦口香糖2 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
李小白662 小时前
Spring MVC(上)
java·spring·mvc
GoodStudyAndDayDayUp2 小时前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea