2021-04-18 11:35  阅读(99)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-date-time-methods.html

Java日期时间 - Java时钟周期

时钟

Clock类表示真实世界的时钟。

我们可以从Clock类中访问时区中的当前时间,日期和时间。

我们可以为系统默认时区创建一个时钟,如下所示。

Clock clock = Clock.systemDefaultZone();

要为指定的时区创建时钟。

    ZoneId  z = ZoneId.of("America/Los_Angeles"); 
    Clock  clock2 = Clock.system(z);
    

要从时钟获取当前的时间,日期和时间,请使用datetime相关类的now(Clock c)
方法。

    import java.time.Clock;
    import java.time.Instant;
    import java.time.LocalDate;
    import java.time.ZonedDateTime;
    
    public class Main {
      public static void main(String[] args) {
        Clock clock = Clock.systemDefaultZone();
    
        Instant instant1 = clock.instant();
        System.out.println(instant1);
    
        Instant instant2 = Instant.now(clock);
        System.out.println(instant2);
    
        LocalDate localDate = LocalDate.now(clock);
        System.out.println(localDate);
    
        ZonedDateTime zoneDateTime = ZonedDateTime.now(clock);
        System.out.println(zoneDateTime);
      }
    }
    

上面的代码生成以下结果。

2021041811312_1.png

周期

周期是以年,月和日为单位的时间跨度。

支持负周期。

持续时间也是以秒和纳秒为单位测量的时间跨度。

持续时间表示机器的精确纳秒数。一个时期更适合人类。

1天,2个月,3天,4个月和5天都是周期的实例。2个月期间可能意味着不同的天数,具体取决于不同的月份。

我们可以使用以下方法创建Period

    static Period of(int years,int months, int days)
    static Period ofDays(int days)
    static Period ofMonths(int months)
    static Period ofWeeks(int weeks)
    static Period ofYears(int years)
    

以下代码显示了如何创建Period。

    import java.time.Period;
    
    public class Main {
      public static void main(String[] args) {
        Period p1 = Period.of(2, 3, 5); // 2 years, 3 months, and 5 days
        Period p2 = Period.ofDays(2);  // 2 days
        Period p3 = Period.ofMonths(-3); // -3 months
        Period p4 = Period.ofWeeks(3); // 3 weeks 
        System.out.println(p1);
        System.out.println(p2);
        System.out.println(p3);
        System.out.println(p4);
    
      }
    }
    

上面的代码生成以下结果。

2021041811311_2.png

例2

Period支持加法,减法,乘法和求反运算。

除法运算执行整数除法,例如,除以3除以7为2。

以下代码显示如何使用周期上的操作。

    import java.time.Period;
    
    public class Main {
      public static void main(String[] args) {
        Period p1  = Period.ofDays(15);
        System.out.println(p1);
        Period p2  = p1.plusDays(12);
        System.out.println(p2);
        Period p3  = p1.minusDays(12);
        System.out.println(p3);
        Period p4  = p1.negated();
        System.out.println(p4);
        Period p5  = p1.multipliedBy(3);
        System.out.println(p5);
      }
    }
    

上面的代码生成以下结果。

2021041811311_3.png

例3

Period plus()向另一个周期添加一个周期。

Period minus()从另一个周期中减去一个周期。

周期normalized()方法标准化年和月。该方法确保月份值保持在0到11之间。“2年零16个月"被标准化为“3年零4个月"。

    import java.time.Period;
    
    public class Main {
    
      public static void main(String[] args) {
        Period p1  = Period.of(2, 3, 5); 
        Period p2  = Period.of(1, 15,   28);
        System.out.println(p1); 
        System.out.println(p2);
        System.out.println(p1.minus(p2));
        System.out.println(p1.plus(p2));
        System.out.println(p1.plus(p2).normalized()); 
      }
    }
    

上面的代码生成以下结果。

2021041811310_4.png

Period Between

Date-Time API提供了计算两个日期和时间之间的已用时间的方法。

我们可以在ChronoUnit枚举中的一个常量上使用between()方法。

ChronoUnit枚举between()方法需要两个datetime对象并返回一个long。 如果第二个参数出现在第一个参数之前,它返回一个负数。

返回金额是两个日期和时间之间的完整单位数。 例如,在06:00和09:30之间调用HOURS.between(),返回值为3,而不是3.5。 而MINUTES.在06:00至09:30之间返回210。

    import java.time.LocalDate;
    import java.time.LocalTime;
    import java.time.Month;
    import java.time.temporal.ChronoUnit;
    
    public class Main {
    
      public static void main(String[] args) {
        LocalDate ld1  = LocalDate.of(2014, Month.JANUARY,  7); 
        LocalDate ld2  = LocalDate.of(2014, Month.MAY,  21); 
        long  days  = ChronoUnit.DAYS.between(ld1, ld2);
        System.out.println(days);
        
        LocalTime  lt1 = LocalTime.of(6, 0); 
        LocalTime  lt2 = LocalTime.of(9, 30); 
        long  hours   = ChronoUnit.HOURS.between(lt1, lt2);
        System.out.println(hours);
        long  minutes = ChronoUnit.MINUTES.between(lt1,   lt2);
        System.out.println(minutes);
      }
    }
    

上面的代码生成以下结果。

202104181139_5.png

Period Util

Date-Time API提供了计算两个日期和时间之间的已用时间的方法。

我们可以对一个日期时间相关类使用until(end_date_or_time,time_unit)方法,例如LocalDate,LocalTime,LocalDateTime,ZonedDateTime等。

    import java.time.LocalDate;
    import java.time.LocalTime;
    import java.time.Month;
    import java.time.temporal.ChronoUnit;
    
    public class Main {
    
      public static void main(String[] args) {
        LocalDate ld1 = LocalDate.of(2014, Month.JANUARY, 7);
        LocalDate ld2 = LocalDate.of(2014, Month.MAY, 18);
    
        LocalTime lt1 = LocalTime.of(7, 0);
        LocalTime lt2 = LocalTime.of(9, 30);
    
        long days = ld1.until(ld2, ChronoUnit.DAYS);
        System.out.println(days);
        long hours = lt1.until(lt2, ChronoUnit.HOURS);
        System.out.println(hours);
        long minutes = lt1.until(lt2, ChronoUnit.MINUTES);
        System.out.println(minutes);
      }
    }
    

上面的代码生成以下结果。

202104181138_6.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java 时钟周期
上一篇
Java 分区日期时间
下一篇
Java Chrono现场单元