DateとTime


DateとTimeの概要
なぜjava 8に新しい日付と時間APIがあるのか
  • 以前に使用したjava.util.Dateクラスは可変(オブジェクトの状態を変更可能)であるため、thread safe(マルチスレッド環境では安全ではない)
  • はありません.
  • クラス名不明(Date,含時)
  • には多くのエラー(タイプ不安定(タイプ安全x).月は0から等)
  • 日付の複雑なアプリケーションでは、通常Joda Timeが使用されます.
    Java 8が提供するDate-time API
  • JRS-310キット提供
  • 設計哲学
  • Clear-APIは、より明確な
  • を提供します.
  • Fluent-APIよりスムーズ
  • Immutable
  • Extensible
  • プライマリAPI
  • は機械時間と人間時間
  • に分けることができる.
  • マシンタイム表示EPOCK(1970年1月1日0時0分0秒)から現在までのタイムスタンプ
  • 人間の時間とは、私たちがよく使う年、月、日、時、分、秒などを指します.
  • タイムスタンプInstant,
  • を使用
  • は、特定の日付(LocalDate)、時間(LocalTime)、および時間(LocalDateTime)
  • を使用することができる.
  • では、Duration(時間ベース)とPeriod(日付ベース)が提供されます.
  • DateTimeFormateを使用して、スケジュールを特定の文字列
  • にマッピングできます.
    DateとTime API
    マシンタイムで現在の状態を表現する方法

  • Instant.now():現在のUTC(GMT)を返します.
  • Instant now=Instant.now();
    System.out.println(now); //기준시 UTC, GMT
    System.out.println(now.atZone(ZoneId.of("UTC")));
    
    ZoneDateTime zonedDateTime= new.atZone(ZoneId.systemDefault());
    System.out.println(zonedDateTime);
  • 人間が使う表現の一つです
  • LocalDateTime.Now():現在のシステムパーティションの日付
  • を返します.
  • ZonedDateTime.Now(ZoneId.of(String):特定のパーティションを返す時間は
  • です.
  • LocalDateTime.of(int,Month,int,int,int,int,int,int):ローカル固有の日付
  • を返します.
  • ZonedDateTime.of(int,Month,int,int,int,int,int,ZoneId):特定のパーティションの特定の日付
  • を返します.
    期間の表示方法

  • Period/Duration. between()
  • LocalDate today=LocalDate.now();
    LocalDate birthDay=LocalDate.of(2020,Month.DECEMBER,26);
    Instant now=Instant.now();
    Instant plus=now.plus(10,ChronoUnit.SECONDS); //새로운 Instant가 나옴(예전에는 x) 
    
    Period between=Period.between(today, birthDay);
    System.out.println(between.get(chronoUnit.MONTHS)); //between으로 날짜간 차이 출력
    
    Period until=today.until(birthday);
    System.out.println(util.get(ChronoUnit.DAYS)); //until로 날짜간 차이 출력
    
    Duration duration=Duration.between(now,plus);
    System.out.println(duration.getSeconds()); //기계용 시간 비교. Period는 인류용 시간 비교
  • グループ化またはマッピング

  • 定義済みフォーマットを参照
    https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#predefined

  • LocalDateTime.parse(String, DateTimeFormatter);

  • Dateteme
  • LocalDateTime now= LocalDateTime.now();
    DateTimeFormatter formatter=DateTimeFormatter.ofPattern("MM/d/yyyy");
    LocalDate date=LocalDate.parse("07/15/1982",formatter); //문자열을 LocalDate 타입으로 파싱
    
    System.out.println(now.format(formatter)); //02/1/2021 출력(현재 날짜). 현재 날짜를 지정한 포맷으로 출력
    System.out.println(date); //1982-07-15 출력
  • 従来のAPIサポート

  • GregarianCalendarとDateタイプのインスタンスをInstantまたはZonedDateTimeに変換できます.

  • java.util.TimeZoneからjavaへtime.相互変換可能ZoneId
  • ZoneId newZoneAPI= TimeZone.getTimeZone("PST").toZoneId(); //예전 API에서 최근 API로
    TimeZone legacyZoneAPI= TimeZone.getTime(newZoneAPI); //최근 API에서 예전 API로
    Instant newInstant= new Date().toInstant(); //Date에서 Instant로
    Date legacyInstant= Date.from(newInstant) //Instant에서 Date로
  • リファレンス
    https://www.inflearn.com/course/the-java-java8