애플리케이션에서 현재 날짜 및 시간을 가져와서 표시하거나 저장하는 작업은 빈번하게 발생합니다.
현재 날짜 및 시간을 사용하는 사례
1. 포스팅 작성 날짜 및 시간을 표시하기 위해 작성 날짜를 데이터베이스에 저장합니다.
2. 온라인 쇼핑몰에서 현재 시간이 타임특가인 경우 이벤트 참여 가능하며 그렇지 않으면 참여 불가능합니다.
위에서 언급한 사례 이외에도 현재 날짜 및 시간을 사용하는 일은 무수히 많습니다. 이번 포스팅에서는 Java에서 현재 날짜 및 시간을 가져오는 여러 가지 방법들을 소개합니다.
System.currentTimeMills()
System.currentTimeMillis() 메서드는 UNIX epoch(1970년 1월 1일) 이후 경과된 시간을 long 타입의 밀리 세컨드로 반환합니다.
System.currentTimeMillis();
밀리세컨드를 사람이 쉽게 읽을 수 있는 날짜로 변환하기 위해 포맷을 설정합니다.
SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");
Date date = new Date(System.currentTimeMillis());
System.out.println(System.currentTimeMillis());
System.out.println(formatter.format(date));
실행 결과
1649476251691
2022-04-09 at 12:50:51 KST
java.util.Date
Java에서 현재 날짜 및 시간을 가져오는 가장 간단한 방법은 Java에서 제공하는 Date 클래스를 인스턴스화하는 것입니다. Date 생성자에 빈 값을 전달하면 현재 날짜 및 시간을 가지는 Date 객체가 생성됩니다.
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
System.out.println(formatter.format(date));
실행 결과
09-04-2022 12:54:39
java.util.Calendar
또 다른 방법으로 Calendar 클래스를 사용합니다. Calendar 클래스는 추상 클래스로 객체를 직접 생성할 수 없으며 getInstance() 메서드로 현재 날짜와 시간을 가져올 수 있습니다.
Calendar calendar = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
System.out.println(formatter.format(calendar.getTime()));
실행 결과
09-04-2022 12:56:35
포맷을 설정하는 SimpleDateFormat은 Date 객체에서만 동작하므로 Date 객체를 반환하는 getTime() 메서드를 전달합니다.
Java 8에서 지원하는 API
Java 8은 java.util.Date 및 java.util.Calender 클래스를 대체하기 위해 새로운 API를 도입하였습니다. 이번 포스팅에서는 4가지 클래스(LocalDate, LocalTime, LocalDateTime, ZonedDateTime)를 소개합니다.
LocalDate
LocalDate는 날짜만 가져올 수 있습니다. 객체를 직접 생성할 수 없으며 정적 메서드인 now() 메서드를 사용하여 현재 날짜를 가져올 수 있습니다.
LocalDate date = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
System.out.println(date.format(formatter));
실행 결과
09-04-2022
now() 메서드에 ZoneId를 전달하여 기본 시간대 대신 지정된 시간대를 기반으로 날짜를 검색할 수 있습니다.
LocalDate date = LocalDate.now(ZoneId.of("Europe/Paris"));
LocalTime
LocalTime은 시간만 가져올 수 있습니다. LocalDate와 마찬가지로 now() 메서드를 사용하여 현재 시간을 가져올 수 있습니다.
LocalTime time = LocalTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
System.out.println(time.format(formatter));
실행 결과
13:16:56
LocalDateTime
LocalDateTime은 날짜와 시간 둘 다 가져올 수 있습니다.
LocalDateTime dateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
System.out.println(dateTime.format(formatter));
실행 결과
09-04-2022 13:20:50
ZonedDateTime
ZonedDateTime은 날짜와 시간을 가져오며 시차 개념을 적용하고 싶은 경우 사용됩니다.
ZonedDateTime nowSeoul = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));
ZonedDateTime nowBerlin = ZonedDateTime.now(ZoneId.of("Europe/Berlin"));
ZonedDateTime nowChicago = ZonedDateTime.now(ZoneId.of("America/Chicago"));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
System.out.println("nowSeoul: " + nowSeoul.format(formatter));
System.out.println("nowBerlin: " + nowBerlin.format(formatter));
System.out.println("nowChicago: " + nowChicago.format(formatter));
실행 결과
nowSeoul: 09-04-2022 13:27:44
nowBerlin: 09-04-2022 06:27:44
nowChicago: 08-04-2022 23:27:44
'Java' 카테고리의 다른 글
[Java]객체(Object)를 XML로 변환 (0) | 2022.04.11 |
---|---|
[Java]main 함수(메서드) (0) | 2022.04.10 |
[Java]날짜 비교 방법 (0) | 2022.04.05 |
[Java]생성자 체인(Constructor Chaining) (0) | 2021.10.13 |
[Java]String 리터럴(Literal), String 객체(Object) (0) | 2021.05.12 |
댓글