Java日期时间

41 篇文章 0 订阅

7.日期时间

JDK8新增了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,11,12);
    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(){
    //      日期转成格式化字符串
    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用于计算两个“日期”间隔的类。

Duration代码演示

@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());
​
}

Period代码演示

@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。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值