Java

[Java]현재 날짜 및 시간 가져오기

DevStory 2022. 4. 9.

애플리케이션에서 현재 날짜 및 시간을 가져와서 표시하거나 저장하는 작업은 빈번하게 발생합니다. 

현재 날짜 및 시간을 사용하는 사례
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
반응형

댓글