第五章 Java API(六)

5.4 日期时间类

日期时间类包括LocaIDate类、LocalTime类、Instant类、Duration类和period类等,这些类都包含在Java.time包中。


表5-9 表示日期时间的主要类

类的名称功能描述
Instant表示时刻,代表的是时间戳
LocaIDate不包含具体时间的日期
LocalTime不包含日期的时间
LocalDateTime包含了日期和时间
Duration基于时间的值测量时间量
Period计算日期时间差异,只能精确到年月日
Clock时钟系统,用于查找当前时刻

5.4.1 Instant类

代表的是某个时间。

表5-10 Instant类的常用方法

方法声明功能描述
now()从系统时钟获取当前时刻
now(Clock clock)从指定时钟获取当前时刻
ofEpochSecond(long epochSecond)从自标准Java计算时代开始的秒数获得一个Instant的实例
ofEpochMilli(long epochMilli)从自标准Java计算时代开始的毫秒数获得一个Instant的实例
getEpochSecond()从1970-01-01T00:00:00Z的标准Java计算时代获取秒数
getNano()从第二秒开始表示的时间线中返回纳秒数
parse(CharSequence text)从第一个文本字符串(如2007-12-03T10:15:30.00Z)获取一个Instant的实例
from(TemporalAccessor tenporal)从时间对象获取一个Instant的实例

案例演示5-20

import java.time.Instant;
public class Example20 {
    public static void main(String[] args) {
        //  Instant 时间戳类从1970 -01 - 01 00:00:00 截止到当前时间的毫秒值
        Instant now = Instant.now();
        System.out.println("从系统获取的当前时刻为:"+now); 
        Instant instant = Instant.ofEpochMilli(1000 * 60 * 60 * 24);
        System.out.println("计算机元年增加毫秒数后为:"+instant);
        Instant instant1 = Instant.ofEpochSecond(60 * 60 * 24);
        System.out.println("计算机元年增加秒数后为:"+instant1);
        System.out.println("获取的秒值为:"+Instant.parse
       ("2007-12-03T10:15:30.44Z").getEpochSecond());
        System.out.println("获取的纳秒值为:"+Instant.parse
       ("2007-12-03T10:15:30.44Z").getNano());
        System.out.println("从时间对象获取的Instant实例为:"+
        Instant.from(now));
    }
}

5.4.2 LocalDate类

LocalDate类仅用来表示日期。在LocalDate类中提供了两个获取日期对象的方法,即now()和of(int year,int month,int dayOfMonth),具体代码如下:

//从一年、一个月和一天获得一个LocalDate的实例

LocalDate date = LocalDate.of(2020,12,12);

//从默认时区的系统时钟获取当前日期

LocalDate nowl = LocalDate.now();

 表5-11 LocalDate的常用方法

 案例演示5-21

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Example21 {
    public static void main(String[] args) {
        //获取日期时分秒
        LocalDate now = LocalDate.now();
        LocalDate of = LocalDate.of(2015, 12, 12);
        System.out.println("1. LocalData的获取及格式化的相关方法--------");
        System.out.println("从LocalData实例获取的年份为:"+now.getYear());
        System.out.println("从LocalData实例获取的月份:"
        +now.getMonthValue());
        System.out.println("从LocalData实例获取当天在本月的第几天:"+
        now.getDayOfMonth());
        System.out.println("将获取到的Loacaldata实例格式化为:"+
        now.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日")));
        System.out.println("2. LocalData判断的相关方法----------------");
        System.out.println("判断日期of是否在now之前:"+of.isBefore(now));
        System.out.println("判断日期of是否在now之后:"+of.isAfter(now));
        System.out.println("判断日期of和now是否相等:"+now.equals(of));
        System.out.println("判断日期of是否时闰年:"+ of.isLeapYear());
        //给出一个符合默认格式要求的日期字符串
        System.out.println("3. LocalData解析以及加减操作的相关方法---------");
        String dateStr="2020-02-01";
        System.out.println("把日期字符串解析成日期对象后为"+
        LocalDate.parse(dateStr));
        System.out.println("将LocalData实例年份加1为:"+now.plusYears(1));
        System.out.println("将LocalData实例天数减10为:"
        +now.minusDays(10));
        System.out.println("将LocalData实例指定年份为2014:"+
        now.withYear(2014));
    }
}

5.4.3 LocalTime类与LocalDate Time类

LelTime类用来表示时间,通常表示的是小时、分钟、秒。与LalalB样, 该类不能代表时间堡上的即时信息,只是时间的描述。在LoalTime类中提供了获取时间对象的方法,与oealDate 用法类似。
同时,LocalTime 类也提供了与日期类相对应的时间格式化、增减时分秒等常用方法,这些方法与日期类相对应。

案例学习5-22

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class Example22 {
    public static void main(String[] args) {
        // 1. 获取当前时间,包含毫秒数
        LocalTime time = LocalTime.now();
        LocalTime of = LocalTime.of(9,23,23);
        System.out.println("从LocalTime获取的小时为:"+time.getHour());
        System.out.println("将获取到的LoacalTime实例格式化为:"+
                time.format(DateTimeFormatter.ofPattern(" HH:mm:ss")));
        System.out.println("判断时间of是否在now之前:"+of.isBefore(time));
        System.out.println("将时间字符串解析为时间对象后为:"+ 
        LocalTime.parse("12:15:30"));
        System.out.println("从LocalTime获取当前时间,不包含毫秒数:"+
        time.withNano(0));
    }
}

案例5-22中调用了几个LoalTime的方法。

需要注意的是,当使用parse ( )方法解析字符电时符串要符合默认的时、分、秒格式要求。

LocalDateTime类是LocalDate类与LocalTime类的综合,它既包含日期,也包含时间,通过查看API可以知道,LocalDateTime 类中的方法包含了LocalDate 类与LocalTime类的方法。

LocalDateTimne默认的格式是2020-02-29T21:23:26.774,这可能与人们经常使用的格式不太符合,所以它经常与DateTmeFormatter起使用指定格式, 除了LocalDte与LocalTme类中的方法外,还额外提供了转换的方法。 

下面通过一个案例来学习 LocalDateTlime 类中特有的方法,如下:

案例学习5-23

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Example23 {
    public static void main(String[] args) {
        //获取当前年月日,时分秒
        LocalDateTime now = LocalDateTime.now();
        System.out.println("获取的当前日期时间为:"+now);
        System.out.println("将目标LocalDateTime转换为相应的LocalDate实例:"+ 
        now.toLocalDate());
        System.out.println("将目标LocalDateTime转换为相应的LocalTime实例:"+ 
        now.toLocalTime());
        //指定格式
        DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern
       ("yyyy年MM月dd日 HH时mm分ss秒");
        System.out.println("格式化后的日期时间为:"+now.format(ofPattern));
    }
}

5.4.4Period和Duration类

1.Duration类

Duration类基于时间值,其作用范围是天、时、分、秒、毫秒和纳秒。

表5-12 Duration类的常用方法

方法声明功能描述
between(Temporal starlnclusive,Temporal end Exclusive)获取一个Duration表示两个时间对象之间的持续时间
toDays()将时间转换为以天为单位
toHours()将时间转换为以小时为单位
toMinutes()将时间转换为以分组为单位
toMillis()将时间转换为以毫秒为单位
toNanos()将时间转换为以纳秒为单位

 案例演示5-24

import java.time.Duration;
import java.time.LocalTime;
public class Example24{
        public static void main(String[] args) {
            LocalTime start = LocalTime.now();
            LocalTime end = LocalTime.of(20,13,23);
            Duration duration = Duration.between(start, end);
            //间隔的时间
            System.out.println("时间间隔为:"+duration.toNanos()+"纳秒");
            System.out.println("时间间隔为:"+duration.toMillis()+"毫秒");
            System.out.println("时间间隔为:"+duration.toHours()+"小时");
        }
}

2.Period类

Period主要用于计算两个日期的间隔。

案例学习5-25

import java.time.LocalDate;
import java.time.Period;
public class Example25 {
    public static void main(String[] args) {
        LocalDate birthday = LocalDate.of(2018, 12, 12);
        LocalDate now = LocalDate.now();
        //计算两个日期的间隔
        Period between = Period.between(birthday, now);
        System.out.println("时间间隔为"+between.getYears()+"年");
        System.out.println("时间间隔为"+between.getMonths()+"月");
        System.out.println("时间间隔为"+between.getDays()+"天");
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值