반응형
지금 이 순간을 기계 시간으로 표현하는 방법
Instant.now()
: 현재 UTC (GMT)를 리턴한다.
- Universal Time Coordinated == Greenwich Mean Time
Instant now = Instant.now();
System.out.println(now);
System.out.println(now.atZone(ZoneId.of("UTC")));
ZonedDateTime zonedDateTime = now.atZone(ZoneId.systemDefault());
System.out.println(zonedDateTime);
인류용 일시를 표현하는 방법
LocalDateTime.now()
: 현재 시스템 Zone에 해당하는(로컬) 일시를 리턴한다.
LocalDateTime.of(int, Month, int, int, int, int)
: 로컬의 특정 일시를 리턴한다.
ZonedDateTime.of(int, Month, int, int, int, int, ZoneId)
: 특정 Zone의 특정 일시를 리턴한다.
기간을 표현하는 방법
Period
/Duration.beteen()
Period between = Period.between(today, birthDay);
System.out.println(between.get(ChronoUnit.DAYS));
파싱 또는 포매팅
LocalDateTime.parse(String, DateTimeFormatter);
Datetime
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/d/yyyy");
LocalDate date = LocalDate.parse("07/15/1982", formatter);
System.out.println(date);
System.out.println(today.format(formatter));
레거시 API 지원
- GregorianCalendar와 Date타입의 인스턴스를
Instant
나ZonedDateTime
으로 변환 가능.
java.util.TimeZone
에서java.time.ZoneId
로 상호 변환 가능.
ZoneId newZoneAPI = TimeZone.getTimeZone("PST").toZoneId();
TimeZone legacyZoneAPI = TimeZone.getTimeZone(newZoneAPI);
Instant newInstant = new Date().toInstant();
Date legacyInstant = Date.from(newInstant);
Date-Time API 활용 예제
public class Main {
public static void main(String[] args) {
/*
Date-Time는 서로 변환 가능하다.
- Instant -> ZonedDateTime
instant.atZone(ZoneId.of("Asia/Seoul"))
- ZonedDateTime -> LocalDateTime
zonedDateTime1.toLocalDateTime();
- ZonedDateTime -> Instant
zonedDateTime1.toInstant();
.
.
파라미터에서 TemporalUnit 타입은 ChronoUnit으로 사용
*/
/* 기계용 시간을 표현 */
Instant instant = Instant.now(); //현재 UTC(GMT)를 리턴한다.
System.out.println(instant); // 기준시 UTC, GMT
System.out.println(instant.atZone(ZoneId.of("UTC")));
System.out.println(instant.atZone(ZoneId.of("GMT")));
System.out.println("#######################");
//기계용 시간을 인류용 시간으로 변환 가능
ZoneId zone = ZoneId.systemDefault(); //현재 지역을 리턴한다.
System.out.println(zone);
ZonedDateTime zonedDateTime = instant.atZone(zone); //기준시 UTC(GMT)를 현재 지역의 일시로 변환한다.
System.out.println(zonedDateTime);
System.out.println("#######################");
/* 기계용 시간을 비교하는 방법 */
Instant InstantNow = Instant.now();
Instant plus = InstantNow.plus(10, ChronoUnit.SECONDS); //새로운 인스턴스 생성, 기존 인스턴스 변경하지 않음
Duration between = Duration.between(InstantNow, plus);
System.out.println(between.getSeconds()); //InstantNow와 plus의 기간
System.out.println("#######################");
/* 인류용 일시 표현 */
LocalDateTime LocalDateTimeNow = LocalDateTime.now(); //현재 시스템 ZoneId를 참고해서 일시를 반환한다.
DateTimeFormatter MMddyyyy = DateTimeFormatter.ofPattern("MM/dd/yyyy"); // 포맷 형태 직접 작성
DateTimeFormatter isoLocalDate = DateTimeFormatter.ISO_LOCAL_DATE; // 미리 정의해둔 포맷 사용
System.out.println(LocalDateTimeNow);
System.out.println(LocalDateTimeNow.format(MMddyyyy)); //LocalDateTimeNow 포매팅
System.out.println(LocalDateTimeNow.format(isoLocalDate));//LocalDateTimeNow 포매팅
System.out.println("#######################");
LocalDate parse = LocalDate.parse("07/15/1982", MMddyyyy); //파싱
System.out.println(parse);
System.out.println("#######################");
LocalDateTime birthDay2 = LocalDateTime.of(1993, Month.JUNE, 24, 0, 0, 0); //현재 시스템 일시 생성
System.out.println(birthDay2);
System.out.println("#######################");
ZonedDateTime nowInKorea = ZonedDateTime.now(ZoneId.of("Asia/Seoul")); //특정 Zone의 일시를 반환한다.
System.out.println(nowInKorea);
System.out.println("#######################");
ZonedDateTime zonedDateTime1 = instant.atZone(ZoneId.of("Asia/Seoul")); //기계 시간을 인류용 일시로 변환
System.out.println(zonedDateTime1);
System.out.println("#######################");
/* 인류용 기간을 비교하는 방법 */
LocalDate today = LocalDate.now();
LocalDate thisYearBirthday = LocalDate.of(2021, Month.JUNE, 24);
Period period = Period.between(today, thisYearBirthday); //today와 thisYearBirthday 기간
System.out.println(period.getDays());
Period until = today.until(thisYearBirthday); //today부터 thisYearBirthday 까지
System.out.println(period.get(ChronoUnit.DAYS));
/*
레거시 API 지원
서로 변환이 가능하다.
*/
Date date2 = new Date();
Instant instant2 = date2.toInstant();
Date newDate = Date.from(instant2);
GregorianCalendar gregorianCalendar = new GregorianCalendar();
//LocalDateTime localDateTime = gregorianCalendar.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
ZonedDateTime dateTime = gregorianCalendar.toInstant().atZone(ZoneId.systemDefault());
GregorianCalendar from = GregorianCalendar.from(dateTime);
ZoneId zoneId = TimeZone.getTimeZone("PST").toZoneId();
TimeZone timeZone = TimeZone.getTimeZone(zoneId);
}
}
[참고자료]
반응형
'Java > 기본' 카테고리의 다른 글
자바 동시성(Java Concurrent) - 2 (Executors) (0) | 2021.07.04 |
---|---|
자바 동시성(Java Concurrent) - 1 (Thread) (0) | 2021.07.02 |
자바(Java) Date-Time API - 1 (Date-Time 소개) (0) | 2021.07.01 |
자바(Java) Optional API - 2 (Optional API 활용) (0) | 2021.06.30 |
자바(Java) Optional API - 1 (Optional 개념 소개) (0) | 2021.06.27 |