만족은 하되 안주하지는 말자

기록해야 기억한다

프로그래밍/JAVA

[java] Date, LocalDateTime 사용법 간단 정리

D36choi 2022. 4. 24. 22:40
728x90

 

Java 8+ 에선 Date 클래스의 단점을 보완한 LocalDateTime 클래스가 도입되었다.

그러나 많은 레퍼런스에선 아직 Date 클래스를 활용한 코드들이 많이 보인다.  

프로그래머스라던지, 프로그래머스라던지... 그래서 각 클래스들로 원하는 동작을 구현할 수 있도록 각각 정리해봤다.

 

현재 시간 구하기

// LocalDateTime
final LocalDateTime now = LocalDateTime.now();
System.out.println("now = " + now);

// Date
final Date now2 = new Date();
System.out.println("date = " + now2);

기본적으로 LocalDateTime 은 static method 들로 처리를 한다.

Date 클래스는 생성을 하면 현재 시각이 기록된다.

 

시간 더하기

현재 시각에 1초(=1000ms)만큼 더하여 출력하고자 한다.

 

//Date
final Date now2 = new Date();
final Calendar calendar = Calendar.getInstance();
calendar.setTime(now2);
calendar.add(Calendar.MILLISECOND, 1000);
System.out.println("plus 1sec(Calendar) = " + calendar.getTime());

// LocalDateTime
final LocalDateTime now = LocalDateTime.now();
final LocalDateTime plus = now.plus(1000, ChronoField.MILLI_OF_DAY.getBaseUnit());
System.out.println("plus 1sec(LocalDateTime) = " + plus);

Date 클래스의 경우 Calendar 클래스를 통해 보통 시간을 더하거나 뺀다.

Calendar.setTime(Date date) 나 calendar.setTimeInMillis(long time) 을 통해 시간을 set한 뒤 add메서드를 통해 더해준다.
이때 첫번째 파라미터에는 Calendar.MILLISECOND, MINUTE, SECOND, HOUR 등 다양한 상수 파라미터를 채워준다.

 

LocalDateTime 의 경우, 다른 클래스는 필요없고 plus() 메서드를 이용하면 된다. ChronoField 의 Enum 상수들을 단위 파라미터로 지정해야 한다.

 

시간 형식 지정 및 파싱

각각의 클래스는 형식이 디폴트로 위 콘솔 이미지 처럼 지정되어있다. 우리가 원하는 형태의 시각으로 출력할 수 있도록 해보자.

또한 문자열을 받아서 이를 시각으로 변환하도록 해보자.

LocalDateTime

final LocalDateTime now = LocalDateTime.now();
final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSS");
System.out.println("now.format(dateTimeFormatter) = " + now.format(dateTimeFormatter));

final LocalDateTime parsedDateTime = LocalDateTime.parse("2017/11/26 12:32:22.233", dateTimeFormatter);
System.out.println("parsedDateTime = " + parsedDateTime);

LocalDateTime 의 경우, DateTimeFormatter 를 ofPattern static method 를 통해 형식을 지정해 놓은 뒤,

LocalDateTime.format(DateTimeFormatter var1); 를 통해 원하는 형태의 문자열로 변환할 수 있다.

 

문자열 -> LocalDateTime 으로 변환하기 위해서는

LocalDateTime parse(CharSequence var0, DateTimeFormatter var1) 를 이용하면 된다.

 

 

Date

final Date now2 = new Date();
final SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
final String formatted = format.format(now2);
System.out.println("formatted = " + formatted);
final Date parse = format.parse("2017/11/26 12:32:22.233");
System.out.println("parsed = " + parse);

Date 는 SimpleDateFormat 생성자의 파라미터로 원하는 형식을 지정해 이용한다.

SimpleDateFormat.format(Date var1); 를 통해 Date 클래스의 커스텀형식 문자열을 만들 수 있다.

SimpleDateFormat.parse(String var1); 를 통해 문자열 -> Date 로 변환이 가능하다.

 

 

 

 

참고 

https://www.leveluplunch.com/java/examples/add-milliseconds-to-date/

 

Add milliseconds to date

Demonstrates how to add milliseconds to a date using Calendar.add, Java 8 date time api, Joda’s DateTime.plusMillis and DateUtils.addMilliseconds

www.leveluplunch.com