개발/[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

특정 날짜 및 시간

 // 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

 

다음 글 : https://authentication.tistory.com/42