JAVA
JAVA 8 : Date์ Time
PYT
2021. 3. 21. 19:48
๋ฐ์ํ
์๋ฐ 8์ ์๋ก์ด ๋ ์ง์ API๊ฐ ์๊ธด ์ด์ ?
- ์ด์ ๊น์ง ์ฌ์ฉํ๋ java.util.Dateํด๋์ค๋ mutable(๊ฐ๋ณ๊ฐ์ฒด, ์์ฑํ์๋ ์ํ๋ฅผ ๋ฐ๊ฟ ์ ์๋ ๊ฐ์ฒด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๊ฐ์ฒด์ฌ๋ ๋ค๋ฅธ ๊ฐ์ ๋ผ ์ ์์)ํ๊ธฐ ๋๋ฌธ์ ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ์์ ํ๊ฒ ์ฐ์ด๊ธฐ ์ด๋ ค์
- ํด๋์ค์ ๋ชจํธํ ์๋ช , Date ์ธ๋ฐ ๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅํด๋ณด๋ฉด ์๊ฐ๊น์ง ๋ค๋ฃธ
- ๋ฒ๊ทธ ๋ฐ์์ ์ฌ์ง๊ฐ ๋ง์ (month๊ฐ 0๋ถํฐ ์์ํ๊ธฐ์ ์ซ์๋ก ์ธ ๊ฒฝ์ฐ ์ค์ํ ์ฌ์ง๊ฐ ๋ง๊ณ , ํ์ ์์ ์ฑ์ด ์์)
- ์ด๋ฌํ ๋ฌธ์ ๋๋ฌธ์ ๋ ์ง ์๊ฐ ์ฒ๋ฆฌ๊ฐ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ Joda Time์ ์ผ์
* java.util.Date ํด๋์ค์ ๋ฌธ์ ์ ์ ๋ํด ์ ํ์๋ ๋ถ๋ถ์ด ์์ผ๋ ์ฝ์ด๋ณด๊ธธ
์๋ฐ 8์์ ์ ๊ณตํ๋ Date-Time API
- JSR-310 ์คํฉ์ ๊ตฌํ์ฒด๋ฅผ ์ ๊ณต
- ๋์์ธ ์ฒ ํ
Clear
Fluent
Immutable (๋ถ๋ณ)
Extensible
์ฃผ์ API
- ๊ธฐ๊ณ์ฉ ์๊ฐ(machine Time)๊ณผ ์ธ๋ฅ์ฉ ์๊ฐ(human Time)์ผ๋ก ๋๋ ์ ์์
- ๊ธฐ๊ณ์ฉ ์๊ฐ์ EPOCK (1970๋ 1์ 1์ผ 0์ 0๋ถ 0์ด)๋ถํฐ ํ์ฌ๊น์ง์ ํ์์คํฌํ๋ฅผ ํํํจ
- ์ธ๋ฅ์ฉ ์๊ฐ์ ์ฐ๋ฆฌ๊ฐ ํํ ์ฌ์ฉํ๋ ๋ , ์, ์ผ, ์, ๋ถ, ์ด ๋ฑ์ ํํ
- ํ์์คํฌํ๋ Instant๋ฅผ ์ฌ์ฉ
- ํน์ ๋ ์ง(LocalDate), ์๊ฐ(LocalTime), ์ผ์(LocalDateTime)๋ฅผ ์ฌ์ฉํ ์ ์์
- ๊ธฐ๊ฐ์ ํํํ ๋๋ Duration(์๊ฐ ๊ธฐ๋ฐ)๊ณผ Period(๋ ์ง ๊ธฐ๋ฐ)๋ฅผ ์ฌ์ฉํ ์ ์์
- DateTimeFomatter๋ฅผ ์ฌ์ฉํด์ ์ผ์๋ฅผ ํน์ ํ ๋ฌธ์์ด๋ก ํฌ๋งทํ ํ ์ ์์
* Date Time ๊ด๋ จ ๊ณต์ ๋ฌธ์๋ค
Date์ Time API
ํ์ฌ ์๊ฐ์ ๊ธฐ๊ณ ์๊ฐ์ผ๋ก ํํํ๋ ๋ฐฉ๋ฒ
- Instatnt.now() : ํ์ฌ UTC (Universal Time Coordinated, GMT(Greenwich Mean Time))๋ฅผ ๋ฆฌํดํจ
์ธ๋ฅ์ฉ ์ผ์๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ
- LocalDateTime.now() : ํ์ฌ ์์คํ Zone์ ํด๋น(Local)ํ๋ ์ผ์๋ฅผ ๋ฆฌํดํจ
- LocalDateTime.of(int, Month, int, int, int, int, ZoneID): ํน์ Zone์ ํน์ ์ผ์๋ฅผ ๋ฆฌํดํจ
public class DateTimeTest {
public static void main(String[] args){
LocalDateTime now = LocalDateTime.now();
System.out.println(now); //์๋ฒ์ zone์ ๋ณด๋ฅผ ์ฐธ๊ณ ํด ๊ทธ ์๊ฐ์ด ์ฐ์ธ๋ค๋ ์ ์ ์ฃผ์ !
LocalDateTime birthday = LocalDateTime.of(1993, Month.APRIL, 15, 0,0,0);
System.out.println(birthday);
//ํ์ฌ ํด๋นํ๋ zone์ ๋ ์ง๋ฅผ ์ถ๋ ฅ (ZonedDateTime๊ณผ Instant ๋ณํํด๊ฐ๋ฉฐ ์ธ ์ ์์)
ZonedDateTime nowInKorea = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));
System.out.println(nowInKorea);
Instant nowInstant = Instant.now();
ZonedDateTime zonedDateTime = nowInstant.atZone(ZoneId.of("Asia/Seoul"));
System.out.println(zonedDateTime);
}
}
|
cs |
๊ธฐ๊ฐ์ ํํํ๋ ๋ฐฉ๋ฒ
- Period / Duration.between()
- period๋ ํด๋จผ์ฉ ๊ธฐ๊ฐ, Duration์ ๋จธ์ ์ฉ ๊ธฐ๊ฐ์ ๋น๊ต
public class DateTimeTest {
public static void main(String[] args){
//Period
LocalDate today = LocalDate.now();
LocalDate thisYearBirthday = LocalDate.of(2021, Month.MARCH, 20);
Period period = Period.between(today, thisYearBirthday);
System.out.println(period.getDays());
Period until = today.until(thisYearBirthday);
System.out.println(until.get(ChronoUnit.DAYS));
//Duration
Instant now = Instant.now();
Instant plus = now.plus(10,ChronoUnit.SECONDS);
Duration between = Duration.between(now, plus);
System.out.println(between.getSeconds());
}
}
|
cs |
ํ์ฑ ๋๋ ํฌ๋งคํ
- LocalDateTime.parse(String, DateTimeFormatter);
- Datetime
public class DateTimeTest {
public static void main(String[] args){
LocalDateTime date = LocalDateTime.now();
System.out.println(date); // ์ถ๋ ฅ ๊ฒฐ๊ณผ : 2021-03-21T19:18:43.252
//ํฌ๋งคํ
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter MMddyyyy = DateTimeFormatter.ofPattern("MM/dd/yyyy");
System.out.println(now.format(MMddyyyy)); //์ถ๋ ฅ ๊ฒฐ๊ณผ : 2021-03-21
//ํ์ฑ
LocalDate parse = LocalDate.parse("12/24/2021", MMddyyyy);
System.out.print(parse);
}
}
|
cs |
* ๊ธฐ์กด์ ๋ฏธ๋ฆฌ ์ ์ํด๋ ํฌ๋งท ์ฐธ๊ณ
๋ ๊ฑฐ์ API ์ง์
- GregorianCalendar์ Date ํ์ ์ ์ธ์คํด์ค๋ฅผ Instant๋ ZonedDateTime์ผ๋ก ๋ณํ
- java.util.TimeZone์์ java.time.ZoneId๋ก ์ํธ ๋ณํ ๊ฐ๋ฅ
public class DateTimeTest {
public static void main(String[] args){
//date์ instant ๋ณํ
Date date = new Date();
Instant instant = date.toInstant();
Date newDate = Date.from(instant);
//GregorianCalendar LocalDateTime์ผ๋ก ๋ณํ
GregorianCalendar gregorianCalendar = new GregorianCalendar();
ZonedDateTime dateTime = gregorianCalendar.toInstant().atZone(ZoneId.systemDefault());
GregorianCalendar from = GregorianCalendar.from(dateTime);
//TimeZone
ZoneId zoneId = TimeZone.getTimeZone("PST").toZoneId();
TimeZone timeZone = TimeZone.getTimeZone(zoneId);
}
}
|
cs |
* ChronoUnit ํ์ฉ
ChronoUnit์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ๊ฐ๋จํ๊ฒ ํน์ ์๊ฐ ๋จ์๋ก ์๊ฐ์ ๊ธธ์ด๋ฅผ ๊ตฌํ ์ ์์
๋ฐ์ํ