개발/[Java] 사용하기
[LocalDateTime] 만들기
sheriff
2022. 5. 16. 15:24
LocalDateTime, LocalDate, LocalTime 에 대한 샘플 코드를 작성해본다.
LocalDateTime 의 경우 시간대(Offset, Zone) 정보 포함되어 있지 않기 때문에 여러 서버가 다른 지역에 있는 경우에 사용해서는 안된다.
동시에 생성된 두개의 LocalDateTime이 각자 다른 지역에 있는 서버에서 생성이 됐을 경우를 생각해보자.
시간대 정보가 있다면 두 객체의 시간이 다르더라도 시차를 계산하여 같은 시간에 만들어 졌다는 것을 알 수 있지만 시간대 정보가 없으면 두 객체가 동시에 만들어졌다는 것을 알 수 없기 때문이다.
이렇게 시차와 지역 정보가 필요한 경우에는 OffsetDateTime 또는 ZonedDateTime 을 사용하면 된다.(이것들도 작성할 예정이다.)
이와 관련된 내용은 다시 정리하기로 한다.
LocalDateTime의 사용법을 알고나면 OffsetDateTime과 ZonedDateTime의 사용은 수월하다.
이 글에서는 OffsetDateTime, ZonedDateTime 내용은 포함되지 않았다.
현재 날짜 및 시간
가장 간단한 내용으로 시작한다. 현재 시간
// 현재 날짜 및 시간
LocalDateTime now = LocalDateTime.now();
System.out.println("now = " + now);
// chicago 날짜 및 시간
LocalDateTime chicagoDateTime = LocalDateTime.now(ZoneId.of("America/Chicago"));
System.out.println("chicagoDateTime = " + chicagoDateTime);
// cuba 날짜 및 시간
LocalDateTime cubaDateTime = LocalDateTime.now(ZoneId.of("Cuba"));
System.out.println("cubaDateTime = " + cubaDateTime);
// LocalDate, LocalTime 으로 현재 날짜 및 시간
LocalDate dateNow = LocalDate.now(); // 현재 날짜
LocalTime timeNow = LocalTime.now(); // 현재 시간
LocalDateTime fromLocalDateAndTime = LocalDateTime.of(dateNow, timeNow);
System.out.println("fromLocalDateAndTime = " + fromLocalDateAndTime);
output:
now = 2022-05-16T18:36:25.400357
chicagoDateTime = 2022-05-16T04:36:25.402610
cubaDateTime = 2022-05-16T05:36:25.404441
fromLocalDateAndTime = 2022-05-16T18:36:25.404835
- ZoneId 를 통해서 해당 지역의 현재 시간을 가져올 수도 있다.
- https://mkyong.com/java8/java-display-all-zoneid-and-its-utc-offset/
특정 날짜 및 시간
// of custom
int year = 2020, month = 5, dayOfMonth = 16, hour = 6, minute = 24, second = 44;
LocalDateTime of = LocalDateTime.of(year, month, dayOfMonth, hour, minute, second);
System.out.println("of = " + of);
// of LocalDate, LocalTime
LocalDate dateNow = LocalDate.of(year, month, dayOfMonth);
LocalTime timeNow = LocalTime.of(hour, minute, second); // second is Optional
LocalDateTime ofLocalDateAndTime = LocalDateTime.of(dateNow, timeNow);
System.out.println("ofLocalDateAndTime = " + ofLocalDateAndTime);
output:
of = 2020-05-16T06:24:44
ofLocalDateAndTime = 2020-05-16T06:24:44
String To LocalDateTime
String input = "2022-05-16 21:07:12";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse(input, formatter);
System.out.println("localDateTime = " + localDateTime);
output:
localDateTime = 2022-05-16T21:07:12
- yyyy : 년
- MM : 월
- dd : 일
- HH : 시
- mm : 분
- ss : 초
Date To LocalDateTime, Calendar To LocalDateTime
// from Date
Date date = new Date();
System.out.println("date = " + date);
LocalDateTime fromDate = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
System.out.println("ldtFromDate = " + fromDate);
// from Calendar
Calendar calendar = Calendar.getInstance();
System.out.println("calendar = " + calendar);
LocalDateTime fromCalendar = LocalDateTime.ofInstant(calendar.toInstant(), calendar.getTimeZone().toZoneId());
System.out.println("fromCalendar = " + fromCalendar);
output:
date = Mon May 16 20:40:33 KST 2022
fromDate = 2022-05-16T20:40:33.709
calendar = java.util.GregorianCalendar[time=1652701233718,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=30,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=4,WEEK_OF_YEAR=21,WEEK_OF_MONTH=3,DAY_OF_MONTH=16,DAY_OF_YEAR=136,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=8,HOUR_OF_DAY=20,MINUTE=40,SECOND=33,MILLISECOND=718,ZONE_OFFSET=32400000,DST_OFFSET=0]
fromCalendar = 2022-05-16T20:40:33.718