Java 日期時間傳統(tǒng)互操作性

2018-03-12 16:27 更新

Java日期時間傳統(tǒng)互操作性


在Java 8之前,Java日期和時間由 java.util.Date , java.util.Calendar java.util.TimeZone 類以及它們的子類(如java.util.GregorianCalendar)定義。

舊的日期時間API在java.util包中定義,而新的Java 8日期時間API在java.time包中定義。

  • java.util.Date
  • java.util.Calendar
  • java.util.GregorianCalendar
  • java.util.TimeZone
  • java.sql.Date
  • java.sql.Time
  • java.sql.Timestamp
  • java.nio.file.attribute.FileTime

JDK 8日期時間API定義了幾種方法在 java.util java.time 對象之間進(jìn)行轉(zhuǎn)換。

  • Calendar.toInstant() 將Calendar對象轉(zhuǎn)換為Instant。
  • java.util.Date toInstant() 將Date對象轉(zhuǎn)換為Instant。
  • java.util.Date from() 方法從Instant中創(chuàng)建一個Date對象。
  • GregorianCalendar.toZonedDateTime() 將GregorianCalendar實(shí)例轉(zhuǎn)換為ZonedDateTime。
  • GregorianCalendar.from(ZonedDateTime) 使用ZonedDateTime實(shí)例中的默認(rèn)語言環(huán)境創(chuàng)建一個GregorianCalendar對象。
  • TimeZone.toZoneId() 將TimeZone對象轉(zhuǎn)換為ZoneId。
  • java.sql.Date toLocalDate() 轉(zhuǎn)換為LocalDate。
  • java.sql.Date valueOf() 從LocalDate創(chuàng)建java.sql.Date
  • java.sql.Time toLocalTime() 轉(zhuǎn)換為LocalTime。
  • java.sql.Time valueOf() 從LocalTime創(chuàng)建java.sql.Time。
  • java.sql.Timestamp toInstant() 轉(zhuǎn)換為Instant。
  • java.sql.Timestamp valueOf() 從LocalDateTime進(jìn)行轉(zhuǎn)換。
  • java.nio.file.attribute.FileTime toInstant() 轉(zhuǎn)換為Instant。
  • java.nio.file.attribute.FileTime from() 轉(zhuǎn)換為Instant。

例子

以下代碼顯示如何將日期轉(zhuǎn)換為即時。

import java.time.Instant;
import java.util.Date;

public class Main {
  public static void main(String[] args) {
    Date  dt =  new Date(); 
    System.out.println("Date: "  + dt);
    
    Instant in = dt.toInstant(); 
    System.out.println("Instant: "  + in);

    Date  dt2  = Date.from(in); 
    System.out.println("Date: "  + dt2);
  }
}

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


例2

我們可以將GregorianCalendar轉(zhuǎn)換為ZonedDateTime,它可以轉(zhuǎn)換為新的Date-Time API中的任何其他類。

我們可以將Instant轉(zhuǎn)換為ZonedDateTime,然后將ZonedDateTime轉(zhuǎn)換為GregorianCalendar與from()方法從GregorianCalendar。

以下代碼顯示了如何將GregorianCalendar轉(zhuǎn)換為ZonedDateTime,反之亦然。

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.OffsetTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.GregorianCalendar;
import java.util.TimeZone;

public class Main {
  public static void main(String[] args) {
    GregorianCalendar gc = new GregorianCalendar(2014, 1, 11, 15, 45, 50);
    LocalDate ld = gc.toZonedDateTime().toLocalDate();
    System.out.println("Local  Date: " + ld);
 
    LocalTime lt = gc.toZonedDateTime().toLocalTime();
    System.out.println("Local Time:  " + lt);
    
    LocalDateTime ldt = gc.toZonedDateTime().toLocalDateTime();
    System.out.println("Local DateTime:  " + ldt);

    OffsetDateTime od = gc.toZonedDateTime().toOffsetDateTime();
    System.out.println("Offset  Date: " + od);

    OffsetTime ot = gc.toZonedDateTime().toOffsetDateTime().toOffsetTime();
    System.out.println("Offset Time:  " + ot);

    ZonedDateTime zdt = gc.toZonedDateTime();
    System.out.println("Zoned DateTime:  " + zdt);

    ZoneId zoneId = zdt.getZone();
    TimeZone timeZone = TimeZone.getTimeZone(zoneId);
    System.out.println("Zone ID:  " + zoneId);
    System.out.println("Time Zone ID:  " + timeZone.getID());

    GregorianCalendar gc2 = GregorianCalendar.from(zdt);
    System.out.println("Gregorian  Calendar: " + gc2.getTime());
  }
}

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號