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/
'프로그래밍 > JAVA' 카테고리의 다른 글
[Spring] @Sql 어노테이션을 test class에서 1번만 실행시키려면? (0) | 2023.01.30 |
---|---|
[JAVA] 10진수 n진수 변환 (n진법 변환) (0) | 2022.05.07 |
다형성: 우리는 왜 List list = new ArrayList(); 라고 쓸까? (0) | 2022.04.04 |
List 2차원 배열 만들기 (Array of ArrayList, 2d array with ArrayList) (0) | 2022.02.10 |
[Java] 정수 콤마 넣기 (천원 단위 변환, 금액 변환) (0) | 2021.08.02 |