날짜와 시간 API
업데이트:
LocalDate와 LocalTime
LocalDate
시간을 제외한 날짜를 표현하는 불변 객체이다.
LocalDate today = LocalDate.now() // 오늘 날짜
LocalDate date = LocalDate.fo(1991, 9, 4); // 1991-09-04
LocalDate date = LocalDate.parse("1991-09-04"); // 1991-09-04
int year = date.getYear(); // 1991
Month month = date.getMonth(); // SEPTEMBER
int month = date.getMonthValue(); // 9
int day = date.getDayOfMonth(); // 4
DayOfWeek dow = date.getDayOfWeek(); // WEDNESDAY
int len date.lengthOfMonth(); // 30 (9월의 일 수??)
booleanleap = date.isLeapYear(); // false(윤년이 아님)
LocalTime
시간을 표현할 수 있다.
LocalTime time = LocalTime.of(13, 45, 20) // 13:45:20
LocalTime time = LocalTime.parse("13:45:20"); // 13:45:20
int hour = time.getHour(); // 13
int minute = time.getMinute(); //45
int second = time.getSecond(); // 20
LocalTime time = LocalTime.parse("13:45:20");
LocalDateTime
LocalDate, LocalTime 조합
//1991-9-4T13:45:20
LocalDateTime dt1 = LocalDateTime.of(1991, Month.SEPTEMBER, 4, 13,45,20);
LocalDateTime dt2 = LocalDateTime.of(date, time);
LocalDateTime dt3 = date.atTime(13,45,20);
LocalDateTime dt4 = date.atTime(time);
LocalDateTime dt5 = time.atDate(date);
LocalDate dt6 = dt1.toLocalDate();
LocalTime dt7 = dt1.toLocalTime();
Instant
Instant 클래스는 유닉스 에포키 시간(1970년 1월 1일 0시 0분 0초 UTC)을 기준으로 특정 지점까지의 시간을 초로 표현한다.
//1991-9-4T13:45:20
Instant.ofEpochSecond(3);
Instant.ofEpochSecond(3, 0);
Instant.ofEpochSecond(2, 1_000_000_000); 2초 이후의 1억 나노초(1초)
Instant.ofEpochSecond(4,-1_000_000_000); 4초 이전의 1억 나노초(1초)
Duration과 Period 정의
Duration
정적 팩토리 메서드 between으로 두 시간 객체 사이의 지속시간을 만들 수 있다.
Duration d1 = Duration.between(time1, time2);
Duration d2 = Duration.between(dateTime1, dateTime2);
DUration d3 = Duration.between(instant1, instant2);
Period
년, 월, 일로 시간을 표현할때 사용
Period tenDays = Period.between(LocalDate.of(1991,9,4), LocalDate.of(1991,9,14));
날짜 조정, 파싱, 포매팅
절대적인 방식의 속성 바꾸기
데이터의 정보를 변경해서 새로운 객체를 반환한다.
LocalDate date = LocalDate.ㅐㄹ(1991, 9, 4); // 1991-09-04
LocalDate date2 = date.withYear(1995); // 1995-09-04
LocalDate date3 = date2.WithayOfMonth(25); // 1995-09-25
LocalDate date4 = date3.with(ChronoField.MONTH_OF_YEAR, 2); // 1995-02-04
상대적인인 방식의 속성 바꾸기
데이터의 정보를 변경해서 새로운 객체를 반환한다.
LocalDate date = LocalDate.ㅐㄹ(1991, 9, 4); // 1991-09-04
LocalDate date2 = date.plusWeeks(1); // 1991-09-11
LocalDate date3 = date2.minusYears(1); // 1990-09-25
LocalDate date4 = date3.plus(6, ChronoUnit.MONTHS); // 1991-03-04
TemporalAdjusters
다음주 일요일, 돌아오는 평일, 특정 달의 마지막 날 등.. 복잡한 기능에서 사용
import static java.time.temporal.TemporalAdjusters.*;
LocalDate date1 = LocalDate.of(2014,3,18); // 2014-03-18
LocalDate date2 = date1.with(nextOrSame(DayOfWeek.SUNDAY)); // 2014-03-23
LocalDate date3 = date2.with(lastDayOfMonth()); // 2014-03-31
날짜와 시간 객체 출력과 파싱
DateTimeFormatter
날짜나 시간을 특정 형식의 문자열로만들 수 있다.
//LocalDate to String
LocalDate date = LocalDate.of(1991, 9, 4);
String s1 = date.format(DateTimeFormatter.BASIC_ISO_DATE); //19910904
String s2 = date.format(DateTimeFormatter.ISO_LOCAL_DATE); // 1991-09-04
//String to LocalDate
LocalDate date1 = LocalDate.parse(s1, DateTimeFormatter.BASIC_ISO_DATE);
LocalDate date2 = LocalDate.parse(s2, DateTimeFormatter.ISO_LOCAL_DATE);
// 특정 포맷
DateTimeFormatter formatter = DatetimeFormatter.ofPattern("dd/MM/yyyy");
String s3 = date.format(formatter);
LocalDate date3 = LocalDate.parse(s3,formatter);
//특정 지역 지정
DateTimeFormatter localFormatter= DatetimeFormatter.ofPattern("d. MMMM yyyy", Locale.ITALIAN);
ZoneId
특정 시간대 구분
지역 ID는 {지역}/{도시} 형식으로 이루어진다.
ZoneId romeZone = ZoneId.of("Europe/Rome");
댓글남기기