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() 计算隔多少纳秒,并返回
相关推荐
弱冠少年4 分钟前
websockets库使用(基于Python)
开发语言·python·numpy
长天一色5 分钟前
C语言日志类库 zlog 使用指南(第五章 配置文件)
c语言·开发语言
一般清意味……17 分钟前
快速上手C语言【上】(非常详细!!!)
c语言·开发语言
卑微求AC17 分钟前
(C语言贪吃蛇)16.贪吃蛇食物位置随机(完结撒花)
linux·c语言·开发语言·嵌入式·c语言贪吃蛇
2401_8572979123 分钟前
招联金融2025校招内推
java·前端·算法·金融·求职招聘
技术无疆27 分钟前
【Python】Streamlit:为数据科学与机器学习打造的简易应用框架
开发语言·人工智能·python·深度学习·神经网络·机器学习·数据挖掘
福大大架构师每日一题34 分钟前
23.1 k8s监控中标签relabel的应用和原理
java·容器·kubernetes
金灰43 分钟前
HTML5--裸体回顾
java·开发语言·前端·javascript·html·html5
菜鸟一皓44 分钟前
IDEA的lombok插件不生效了?!!
java·ide·intellij-idea
爱上语文1 小时前
Java LeetCode每日一题
java·开发语言·leetcode