Java 時(shí)鐘周期

2018-03-12 14:35 更新

Java日期時(shí)間 - Java時(shí)鐘周期

時(shí)鐘

Clock 類表示真實(shí)世界的時(shí)鐘。

我們可以從Clock類中訪問時(shí)區(qū)中的當(dāng)前時(shí)間,日期和時(shí)間。

我們可以為系統(tǒng)默認(rèn)時(shí)區(qū)創(chuàng)建一個(gè)時(shí)鐘,如下所示。

Clock clock = Clock.systemDefaultZone();

要為指定的時(shí)區(qū)創(chuàng)建時(shí)鐘。

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

要從時(shí)鐘獲取當(dāng)前的時(shí)間,日期和時(shí)間,請(qǐng)使用datetime相關(guān)類的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);
  }
}

上面的代碼生成以下結(jié)果。

周期

周期是以年,月和日為單位的時(shí)間跨度。

支持負(fù)周期。

持續(xù)時(shí)間也是以秒和納秒為單位測(cè)量的時(shí)間跨度。

持續(xù)時(shí)間表示機(jī)器的精確納秒數(shù)。一個(gè)時(shí)期更適合人類。

1天,2個(gè)月,3天,4個(gè)月和5天都是周期的實(shí)例。2個(gè)月期間可能意味著不同的天數(shù),具體取決于不同的月份。

我們可以使用以下方法創(chuàng)建 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)

以下代碼顯示了如何創(chuàng)建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);

  }
}

上面的代碼生成以下結(jié)果。

例2

Period支持加法,減法,乘法和求反運(yùn)算。

除法運(yùn)算執(zhí)行整數(shù)除法,例如,除以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);
  }
}

上面的代碼生成以下結(jié)果。

例3

Period plus()
向另一個(gè)周期添加一個(gè)周期。

Period minus()
從另一個(gè)周期中減去一個(gè)周期。

周期normalized()方法標(biāo)準(zhǔn)化年和月。該方法確保月份值保持在0到11之間?!?年零16個(gè)月"被標(biāo)準(zhǔn)化為“3年零4個(gè)月"。

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

上面的代碼生成以下結(jié)果。

Period Between

Date-Time API提供了計(jì)算兩個(gè)日期和時(shí)間之間的已用時(shí)間的方法。

我們可以在ChronoUnit枚舉中的一個(gè)常量上使用 between()方法。

ChronoUnit枚舉between()方法需要兩個(gè)datetime對(duì)象并返回一個(gè)long。 如果第二個(gè)參數(shù)出現(xiàn)在第一個(gè)參數(shù)之前,它返回一個(gè)負(fù)數(shù)。

返回金額是兩個(gè)日期和時(shí)間之間的完整單位數(shù)。 例如,在06:00和09:30之間調(diào)用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);
  }
}

上面的代碼生成以下結(jié)果。

Period Util

Date-Time API提供了計(jì)算兩個(gè)日期和時(shí)間之間的已用時(shí)間的方法。

我們可以對(duì)一個(gè)日期時(shí)間相關(guān)類使用 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);
  }
}

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)