자바에서 현재 날짜와 시간을 구하는 방법과 날짜 및 시간 형식을 지정해주는 방법에 대해 설명드리겠습니다.
현재 날짜, 시간 구하기
LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Date, Calendar에서 오늘 날짜를 가져오는 방법입니다.
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
public class NowDateTime {
public static void main(String[] args) {
LocalDate nowLocalDate = LocalDate.now();
System.out.println("nowLocalDate = " + nowLocalDate);
LocalTime nowLocalTime = LocalTime.now();
System.out.println("nowLocalTime = " + nowLocalTime);
LocalDateTime nowLocalDateTime = LocalDateTime.now();
System.out.println("nowLocalDateTime = " + nowLocalDateTime);
ZonedDateTime nowZonedDateTime = ZonedDateTime.now();
System.out.println("nowZonedDateTime = " + nowZonedDateTime);
Date nowDate = new Date();
System.out.println("nowDate = " + nowDate);
Calendar nowCalendar = Calendar.getInstance();
System.out.println("nowCalendar = " + nowCalendar);
}
}
Date와 Calendar 클래스는 Java 초기 버전에서 사용된 클래스로, 현재는 잘 사용되지 않습니다.
메소드도 Deprecated 된 경우가 많아서 날짜 및 시간을 다룰 때 Date나 Calendar보다는 LocalDate나 LocalTime, LocalDateTime 클래스 사용을 권장합니다.
날짜 포맷 지정
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
public class NowDateFormat {
public static void main(String[] args) {
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate nowLocalDate = LocalDate.now();
System.out.println("dateFormatter.format(nowLocalDate) = " + dateFormatter.format(nowLocalDate));
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH시 mm분 ss.SSS초");
LocalTime nowLocalTime = LocalTime.now();
System.out.println("timeFormatter.format(nowLocalTime) = " + timeFormatter.format(nowLocalTime));
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 E a HH시 mm분 ss.SSS초");
LocalDateTime nowLocalDateTime = LocalDateTime.now();
System.out.println("dateTimeFormatter.format(nowLocalDateTime) = " + dateTimeFormatter.format(nowLocalDateTime));
DateTimeFormatter zonedDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 E a HH시 mm분 ss.SSS초 z");
ZonedDateTime nowZonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTimeFormatter.format(nowZonedDateTime) = " + zonedDateTimeFormatter.format(nowZonedDateTime));
Date nowDate = new Date();
System.out.println("dateFormatter.format(nowDate.toInstant()) = " + dateFormatter.format(nowDate.toInstant().atZone(ZoneId.systemDefault())));
Calendar nowCalendar = Calendar.getInstance();
System.out.println("dateTimeFormatter.format(nowCalendar.toInstant()) = " + dateTimeFormatter.format(nowCalendar.toInstant().atZone(ZoneId.systemDefault())));
}
}
DateTimeFormatter를 사용해서 원하는 형식대로 날짜 및 시간을 문자열로 변환할 수 있습니다.
그리고 변환하고자 하는 시간 데이터에는 포맷과 일치하는 값이 있어야 합니다.
예를 들면, 시분초를 표시하는 포맷을 만들었는데 변환하고자 하는 데이터에 시분초가 없는 경우(ex. LocalDate)에는 변환 시 오류가 발생합니다.
많이 사용되는 포맷 종류는 다음과 같습니다.
의미 | 표기 | 예시 |
연 | y; yy; yyyy; Y; YY; YYYY; | 2024; 24; 2024; 2024; 24; 2024; |
월 | M; MM; | 1~12; 01~12 |
일 | d; dd; | 1; 01 |
요일 | c; cccc; e; eeee; E; EEEE; | 1~7; 일요일~토요일; 1~7; 일요일~토요일; 일~토; 일요일~토요일; |
오전/오후 | a | 오전/오후 AM/PM |
시 | h; hh; k; kk; K; H; HH; | 1~12; 01~12; 1~24; 01~24 0~11; 00~11; 0~23; 00~23; |
분 | m; mm | 0~59; 00~59; |
초 | s; ss | 0~59; 00~59; |
밀리초 | S | S 개수=밀리초 자리수(0~9자리까지 사용가능) |
요일이나 오전/오후의 경우 언어를 지정하지 않으면 컴퓨터의 시스템 언어 설정에 맞춰서 표기가 되는 것 같습니다.
표시되는 언어를 변경하고 싶다면 다음과 같이 사용하면 됩니다.
DateTimeFormatter engDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 a", Locale.ENGLISH);
DateTimeFormatter korDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 a");
System.out.println("ENG dateTimeFormatter.format(LocalDateTime.now()) = " + engDateTimeFormatter.format(LocalDateTime.now()));
System.out.println("KOR dateTimeFormatter.format(LocalDateTime.now()) = " + korDateTimeFormatter.format(LocalDateTime.now()));
읽으면 좋은 글
[Java] LocalDate, LocalDateTime 날짜, 시간 더하기 및 빼기