본문 바로가기

# 02/Java

[윤성우 열혈자바] 31-2. 시간대를 적용한 코드 작성 그리고 출력 포맷의 지정

반응형

세계의 시간대



한국의 시간대는 UTC+9

세계 협정시보다 9시간 빠름을 의미함








시간대를 표현하는 ZoneId 클래스


시간대 고려한 코드 작성을 위해서는 ZonedId 인스턴스 생성


class ZoneIdDemo1 {

   public static void main(String[] args) {

      ZoneId paris = ZoneId.of("Europe/Paris");

      System.out.println(paris);

   }

}

파리의 시간대 정보를 반영한 ZonedId 생성









ZoneId 인스턴스 생성 위한 문자열 확인 방법


시간대별 문자열 정보 전체 출력 방법

ZoneId.getAvailableZoneIds()

      .stream()

      .sorted()

      .forEach(s -> System.out.println(s));



일부 정보만 선별해서 출력하는 방법

ZoneId.getAvailableZoneIds()

      .stream()

      .filter(s -> s.startsWith("Asia"))

      .sorted()

      .forEach(s -> System.out.println(s));








시간대를 반영한 ZonedDateTime 클래스


public static void main(String[] args) {

   // 이곳의 현재 날짜와 시각

   ZonedDateTime here = ZonedDateTime.now();

   System.out.println(here);

   

   // 동일한 날짜와 시각의 파리

   ZonedDateTime paris = ZonedDateTime.of(

         here.toLocalDateTime(), ZoneId.of("Europe/Paris"));

                 날짜와 시각 정보만 LocalDateTime 인스턴스에 담아서 반환

   System.out.println(paris);

   

   // 이곳과 파리의 시차

   Duration diff = Duration.between(here, paris);

   System.out.println(diff);

}


2016-12-24T15:32:02.973+09:00[Asia/Seoul]

날짜는 2016-12-24, 시각은 15:32:02.973, 시간대는 Asia/Seoul









시간대를 반영한 예제


[From 한국 to 프랑스]

 • 한국 출발 현지 시간 2017 12 9 14 30 

 • 파리 도착 현지 시간 2017 12 9 17 25

 • 비행에 걸린 시간은?


public static void main(String[] args) {

   // 한국 출발 2017-09-09 14:30

   ZonedDateTime departure = ZonedDateTime.of(

        LocalDateTime.of(2017, 12, 9, 14, 30), ZoneId.of("Asia/Seoul"));

   System.out.println("Departure : " + departure);

   

   // 파리 도착 2017-09-09 17:25

   ZonedDateTime arrival = ZonedDateTime.of(

        LocalDateTime.of(2017, 12, 9, 17, 25), ZoneId.of("Europe/Paris"));

   System.out.println("Arrival : " + arrival);

   

   // 비행 시간

   System.out.println(Duration.between(departure, arrival));

}










날짜와 시각 정보의 출력 포맷 지정


y, M, d 각각 , , 일의 출력을 의미

H, m, s 각각 , , 초의 출력을 의미

VV 시간대 ID 출력을 의미


public static void main(String[] args) {

   ZonedDateTime date = ZonedDateTime.of(

   LocalDateTime.of(2019, 4, 25, 11, 20), ZoneId.of("Asia/Seoul"));

   

   // 출력의 포맷 정보는 java.time.format.DateTimeFormatter 인스턴스에 담는다.

   DateTimeFormatter fm1 = DateTimeFormatter.ofPattern("yy-M-d");

   DateTimeFormatter fm2 = DateTimeFormatter.ofPattern("yyyy-MM-d, H:m:s");

   DateTimeFormatter fm3 = DateTimeFormatter.ofPattern("yyyy-MM-d, HH:mm:ss VV");

   

   // LocalDate, LocalTime, LocalDateTime, ZonedDateTime 모두 존재하는 format 메소드 호출한다.

   System.out.println(date.format(fm1));

   System.out.println(date.format(fm2));

   System.out.println(date.format(fm3));

}




반응형