日期时间常用标准库

1,time包简介:

  • 日期、时间、瞬间和持续时间的主要 API
  • 基于 ISO 日历系统,该系统是遵循预测格列高利规则的事实上的世界日历
  • 对于包里的类都是不可变并且是线程安全的 > 官网地址:Java API Documentation redirect

2,time包的常用类

  • LocalDateTime 日期和时间类:获取和设置时间和日期
  • DateTimeFormatter 格式化类:日期和时间的格式化显示
  • Instant 瞬时类:获取瞬时时间

3,LocalDateTime 日期和时间类

package preciseTest.moduleTest;
import java.time.LocalDateTime;

public class LocalDateTimeDemo {
    public static void main(String[] args) {
        //now() -  获取当前系统时间
        LocalDateTime time = LocalDateTime.now();
        System.out.println("当前系统时间:"+ time);                 //2023-09-28T15:19:49.595986100
        //of() -  设置指定的年,月,日,时,分,秒
        LocalDateTime of = LocalDateTime.of(2023, 9, 30, 16, 30, 00, 00);
        System.out.println("设置系统时间为:"+ of);              //2023-09-30T16:30
        //getXxx()  -  获取相关的属性
        System.out.println("获取当前年份:"+time.getYear());                     //2023
        System.out.println("获取当前年第几天:"+time.getDayOfYear());            //271天
        System.out.println("获取英文当前月份:"+ time.getMonth());               //SEPTEMBER
        System.out.println("获取中文当前月份:"+ time.getMonthValue());          //9
        System.out.println("获取当前月份第几天:"+ time.getDayOfMonth());        //28天
        System.out.println("获取英文这周第几天:"+ time.getDayOfWeek());         //THURSDAY
        System.out.println("获取当前小时点:"+ time.getHour());                  //15点
        System.out.println("获取当前第几分钟:"+ time.getMinute());              //45min

        //with()  -  设置相关的属性
        System.out.println("设置当前年份为:"+ time.withYear(2024));             //2024-09-28T15:47:06.091531200
        System.out.println("设置当前月份为:"+ time.withMonth(8));               //2023-08-28T15:47:37.021582500
        System.out.println("设置当前小时为:"+ time.withHour(18));               //2023-09-28T18:48:15.329719700
        //体现了不可变性
        System.out.println("再次打印当前时间:"+ time);                         //2023-09-28T15:48:58.318757800

        //plusXxx() - 属性增加
        System.out.println("当前年份增加3:" + time.plusYears(3));             //2026-09-28T15:50:43.600095600
        System.out.println("当前月份增加2:" + time.plusMonths(2));            //2023-11-28T15:51:26.654472400

        //minusXxx() -  属性减少
        System.out.println("当前月份减少4:" +time.minusMonths(4)) ;           //2023-05-28T15:53:02.782831600
        System.out.println("当前天数减少10:" +time.minusDays(10)) ;           //2023-09-18T15:53:38.529898500

    }
}

4,DateTimeFormatter 格式化类

package preciseTest.moduleTest;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;

public class DateTimeFormatterDemo {
    public static void main(String[] args) {
        //日期时间格式化类
        //ofPattern(): 自定义日期格式
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        //format(): 格式化–>日期时间转换成字符串
        String str = dateTimeFormatter.format(LocalDateTime.now());
        System.out.println("当前系统时间格式化后:" + str);              //2023-09-28 16:28:17 周四
        //parse(): 解析–>字符串转换成日期时间
        TemporalAccessor parse = dateTimeFormatter.parse(str);
        System.out.println("日期字符串转换成日期时间:" +parse);         //{},ISO resolved to 2023-09-28T16:46:18
        TemporalAccessor accessor = dateTimeFormatter.parse("2023-09-21 12:30:50");    //这里的text格式要与上面自定义的格式一致,否则会报错
        System.out.println(accessor);                                  //{},ISO resolved to 2023-09-21T12:30:50

    }
}

5,Instant 瞬时类

package preciseTest.moduleTest;

import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;

public class InstantDemo {
    public static void main(String[] args) {
        //instant类:获取瞬时时间类
        //now() - 获取本初子午线对应的标准时间,即英国格林尼治天文时间
        Instant now = Instant.now();
        System.out.println("获取格林尼治当前时间:"+now);                                 //2023-09-28T08:57:14.353751600Z
        //atOffset() -  添加时间的偏移量
        OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));
        System.out.println("东八区时间为:"+ offsetDateTime );                           //2023-09-28T16:57:14.353751600+08:00
        //toEpochMilli()  -  获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数 ,即获取时间戳
        long milli = now.toEpochMilli();
        System.out.println("获取当前格林尼治时间的毫秒数:"+ milli);
        //ofEpochMilli()  - 通过给定的毫秒数,获取Instant实例,即获取格林尼治天文时间
        Instant instant = Instant.ofEpochMilli(1695891635207L);
        System.out.println("通过给定的毫秒数,获取当前格林尼治瞬时时间:"+ instant);      //2023-09-28T09:00:35.207Z
        
    }
}