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() 计算隔多少纳秒,并返回
相关推荐
天天进步2015几秒前
Python全栈项目--社区问答平台
开发语言·python·django
我登哥MVP6 分钟前
Spring Boo从“会用”到“精通”:Spring Boot 入门
java·spring boot·后端·spring·maven·intellij-idea·mybatis
skywalk81637 分钟前
Tree-sitter是一个解析器生成器工具和一个增量解析库。它可以为源文件构建具体的语法树,并在编辑源文件时有效地更新语法树
开发语言·编程
染翰11 分钟前
Java 实现 Git 自动克隆工具,打包成 Windows 独立 EXE(免安装JDK)
java·git·后端
AI视觉网奇18 分钟前
Bambu Studio 发现 xx个开放边
开发语言·人工智能·python
七老板的blog19 分钟前
多阶段 AI 评测流水线架构设计与实践
java·人工智能·spring
qq_4581482024 分钟前
科大讯飞实时语音识别(rtasr)真实项目踩坑经验总结与手把手教学真实可运行Demo
java·开发语言·websocket·语音识别
三品吉他手会点灯25 分钟前
C语言学习笔记 - 46.运算符和表达式 - 运算符4 - 对初学运算符的一些建议
c语言·开发语言·笔记·学习
创业之路&下一个五年28 分钟前
mvvm中v和vm关系,vm中v和m的关系?
java·开发语言·javascript
阿昌喜欢吃黄桃28 分钟前
Java优质开源AI项目
java·ai·langchain·开源·rag·springai·langchain4j