第五章 Java API(六)

  • Post author:
  • Post category:java


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()+"天");
    }
}



版权声明:本文为Yuns_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。