资讯详情

Java日期时间

7.日期时间

JDK新增了3个日期时间类,分别是:LocalDate,LocalTime,LocalDateTime

①LocalDate(日期)

②LocalTime(时间)

③LocalDateTime(日期时间)

日期时间格式化

JDK8之前的日期有一些问题,比如API过时、线程安全、时区处理麻烦等问题。JDK8中介绍了与新日期时间相关的新日期API。

JDK8引入了LocalDate、LocalTime、LocalDateTime类,这些类在java.time包下,并且它们的实例是不可变对象。分别使用表示ISO-8601日历系统的日期、时间和日期。

7.1 日期

日期包括日期信息和日期操作的常用信息API如下

 @Test   public void dateTime01(){ //    获取当前相应的日期     LocalDate now = LocalDate.now();     System.out.println(now);      LocalDate date = LocalDate.of(2020, 12, 13);     System.out.println(date); //    获取年份     System.out.println(now.getYear()); //    获取月份,英文     System.out.println(now.getMonth()); //    获取月份值     System.out.println( now.getMonthValue()); //     获得当月中旬的第几天,也就是几号     System.out.println(now.getDayOfMonth()); //     获得当周中的第几天,也就是星期     System.out.println(now.getDayOfWeek()); //     获取年中的第几天     System.out.println(now.getDayOfYear()); //     修改年份为2019     System.out.println(now.withYear(2019)); //     修改月份为2     System.out.println(now.withMonth(2)); //     修改日期为3号     System.out.println(now.withDayOfMonth(3));    }

7.2 时间

时间包含时分秒信息,时间操作常用的API如下

@Test public void dateTime02(){   LocalTime time = LocalTime.of(11,12,13);   System.out.println(time);   //    获取当前时间   LocalTime now = LocalTime.now();   //    获取小时   System.out.println(now.getHour());   //    获取分   System.out.println(now.getMinute());   //    获取秒   System.out.println(now.getSecond());   //    获取纳秒   System.out.println(now.getNano());   //    修改小时为12   System.out.println(now.withHour(12));   //    修改分钟为22   System.out.println(now.withMinute(22));   //     修改秒为33   System.out.println(now.withSecond(33)); }

7.3 日期时间

日期时间包括年、月、日、分秒信息,常用API如下

@Test public void dateTime03(){   LocalDateTime time = LocalDateTime.of(2020,12,11,10,1112);   System.out.println(time);    LocalDateTime now = LocalDateTime.now();   System.out.println(now);    //    获取年份   System.out.println(now.getYear());   //    获取月份,英文   System.out.println(now.getMonth());   //    获取月份值   System.out.println(now.getMonthValue());   //     获得当月中旬的第几天,也就是几号   System.out.println(now.getDayOfMonth());   //     获得当周中的第几天,也就是星期   System.out.println(now.getDayOfWeek());   //     获取年中的第几天   System.out.println(now.getDayOfYear());   //    获取小时   System.out.println(now.getHour());   //    获取分   System.out.println(now.getMinute());   //    获取秒   System.out.println(now.getSecond());   //    获取纳秒   System.out.println(now.getNano());   //     修改年份为2019   System.out.println(now.withYear(2019));   //     修改月份为2   System.out.println(now.withMonth(2));   //     修改日期为3号   System.out.println(now.withDayOfMonth(3));   //    修改小时为12   System.out.println(now.withHour(12));   //    修改分钟为22   System.out.println(now.withMinute(22));   //     修改秒为33   System.out.println(now.withSecond(33)); }

tip:

修改时间和日期是返回新的日期时间对象,原来的日期时间对象不会改变。

7.4 格式化

可以通过java.time.format.DateTimeFormatter日期时间可以分析和格式化。

@Test public void dateTime04(){   &nbp;//      日期转成格式化字符串
    LocalDateTime now = LocalDateTime.now();
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
    String formatNow = now.format(dtf);
    System.out.println(formatNow);
​
    //       格式化字符串转成日期
    LocalDateTime parse = LocalDateTime.parse("2021年01月28日 04时14分43秒", dtf);
    System.out.println(parse);
}

7.5 日期时间差

JDK8中通过Duration用于计算两个“时间”间隔。通过Period用于计算两个“日期”间隔的类。

@Test
public void dateTime05(){
    LocalTime now = LocalTime.now();
    System.out.println(now);
    LocalTime time = LocalTime.of(17,48,12);
    System.out.println(time);
​
    Duration duration = Duration.between(now,time);
    //      时间差转成小时
    System.out.println(duration.toHours());
    //      时间差转成分钟
    System.out.println(duration.toMinutes());
    //      时间差转成秒
    System.out.println(duration.getSeconds());
    //      时间差转成纳秒
    System.out.println(duration.toNanos());
​
}

@Test
public void dateTime06(){
    LocalDate now = LocalDate.now();
    LocalDate date = LocalDate.of(2030,4,30);
    Period period = Period.between(now,date);
    //      获取年份差
    System.out.println(period.getYears());
    //      获取月份差
    System.out.println(period.getMonths());
    //       获取日期差
    System.out.println(period.getDays());
}

注意:

LocalDate now2 = LocalDate.now(); LocalDate localDate = now2.plusMonths(-11);//12是一个周期 Period period = Period.between(now2, localDate); System.out.println(period.getMonths());

7.6 时间校正器

有时候我们需要将日期或者时间进行校正,比如设置为“下个月的第1天”等,可以通过时间校正器进行。

  • TemporalAdjuster:时间校正器。

  • TemporalAdjusters:通过静态方法提供大量的常用的TemporalAdjuster实现。

    @Test
    public void dateTime07(){
        LocalDateTime now = LocalDateTime.now();
        //      设置下月1号的校正器
        TemporalAdjuster firstDayOfNextMonth = temporal -> {
            LocalDateTime time = (LocalDateTime) temporal;
            return time.plusMonths(1).withDayOfMonth(1);
        };
        //      通过校正器调节now的值
        System.out.println(now.with(firstDayOfNextMonth));
    ​
        //       TemporalAdjusters获取下一年的第1天的校正器
        System.out.println(now.with(TemporalAdjusters.firstDayOfNextYear()));
    ​
    }

LocalDateTime的代码

package com.blb.demo4;
​
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
​
public class Demo1 {
    public static void main(String[] args) {
//      LocalDateTime
//      创建对象
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime.getYear());
        System.out.println(localDateTime.getMonthValue());//7
//      System.out.println(localDateTime.getMonth());//JULY
//      System.out.println(localDateTime.getDayOfWeek());//THURSDAY
        System.out.println(localDateTime.getDayOfMonth());//21
        System.out.println(localDateTime.getHour());
        System.out.println(localDateTime.getMinute());
        System.out.println(localDateTime.getSecond());
//      今年是一年的第多少天
        System.out.println(localDateTime.getDayOfYear());//202
//      星期几
        System.out.println(localDateTime.getDayOfWeek().getValue());//4
        
//      创建一个指定日期的时间 2022-1-1 00:00:00
        LocalDateTime localDateTime2 = localDateTime.of(2022, 1, 1, 0, 0,0);
        System.out.println(localDateTime2);
        
        System.out.println(localDateTime);
        //创建日期时间格式化工具类,并指定格式
//      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
//      System.out.println(formatter.format(localDateTime));
        
//      2022年07月21日 11时13分06秒
//      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
//      System.out.println(formatter.format(localDateTime));
        
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("星期e");//星期五 第一天是从星期天开始
        System.out.println(formatter.format(localDateTime));
        
//      如何将字符串转为LocalDateTime 2022-07-21 11:15:00
        DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        TemporalAccessor parse = formatter1.parse("2022-07-21 11:15:00");
        LocalDateTime localDateTime3 = LocalDateTime.from(parse);
        System.out.println(localDateTime3);
    }
}
​

一般都是写静态的,就可以直接通过类名去调用了,就不用创建对象,公共的地方用静态的,非公共的用实例的。有没有返回值,一般return的有返回值的还需要再使用的就用有返回值,如果这个返回值不需要用了就可以不用返回值直接sout。

标签: 继电器底座dtf08a

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台