Study/java

[Java] 현재 날짜와 시간 구하기 및 형식 지정, 문자열 변환

 

자바에서 현재 날짜와 시간을 구하는 방법과 날짜 및 시간 형식을 지정해주는 방법에 대해 설명드리겠습니다.

 

현재 날짜, 시간 구하기

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 사용 결과
DateTimeFormatter 사용 결과

 

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()));

Locale 지정 DateTimeFormatter 날짜 변환 결과
Locale 지정 DateTimeFormatter 날짜 변환 결과

 

 

읽으면 좋은 글

[Java] LocalDate, LocalDateTime 날짜, 시간 더하기 및 빼기

 

[Java] LocalDate, LocalDateTime 날짜, 시간 더하기 및 빼기

자바의 LocalDate와 LocalDateTime을 사용해서 날짜 및 시간을 더하거나 뺀 결과 값을 구하는 방법에 대해 설명드리겠습니다. 날짜 및 시간 더하기 plus 메소드를 사용하면 날짜나 시간을 편리하게 더할

priming.tistory.com