본문 바로가기
JAVA

[JAVA] 현재 날짜, 시간 구하기

by 무사뎀벨레 2022. 5. 3.

 

 

개발을 하다 보면 현재 시간을 추출하여 사용할 경우가 생깁니다.

그럴 경우 JAVA에서는 JAVA API를 사용하여 날짜, 시간을 구할 수 있습니다.

 

 

 

아래와 같이, JAVA8 이전과 이후로 사용하는 API가 차이가 납니다.

JAVA8 이전 JAVA8 이후
java.util.Date java.time.LocalDate
java.util.Calendar java.time.LocalTime
  java.time.LocalDateTime

 

 

 

 

 

 

JAVA8 이전


JAVA8 이전의 날짜와 시간을 나타내는 Date, Calendar 클래스는 많은 부분이 Deprecated(더 이상 사용되지 않거나 중요도가 떨어짐) 되었으며, 가능하면 사용을 권장하지 않습니다.

1. java.util.Date

import java.text.SimpleDateFormat;
import java.util.Date;

public class CurrentDateTime {
    public static void main(String[] args) {
       
        // 현재 날짜/시간
        Date now = new Date();
       
        // 현재 날짜/시간 출력
        System.out.println(now); // Thu May 03 14:43:32 KST 2022
        
        // 포맷팅 정의
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분 ss초");
        
        // 포맷팅 적용
        String formatedNow = formatter.format(now);
        
        // 포맷팅 현재 날짜/시간 출력
        System.out.println(formatedNow); // 2022년 05월 03일 14시 43분 32초
    }
}

현재 시간

Date now = new Date();

Date객체를 생성하여 현재 시간을 추출하였습니다.

 

포맷 지정

SimpleDateFormat formatter = new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분 ss초");

String formatedNow = formatter.format(now);
SimpleDateFormat 클래스를 이용하여, 원하는 포맷으로 문자열을 생성할 수 있습니다.

yyyy년 MM월 dd일 HH시 mm분 ss초 뿐만 아니라 다양한 포맷을 적용할 수 있습니다.

 

 

2. java.util.Calendar

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class CurrentDateTime {
    public static void main(String[] args) {
        
        // 현재 날짜/시간
        Date now = Calendar.getInstance().getTime();
        
        // 현재 날짜/시간 출력
        System.out.println(now); // Thu May 03 14:50:24 KST 2022
       
       // 포맷팅 정의
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분 ss초");
        
        // 포맷팅 적용
        String formatedNow = formatter.format(now);
        
        // 포맷팅 현재 날짜/시간 출력
        System.out.println(formatedNow); // 2022년 05월 03일 14시 50분 24초
    }
}

현재 시간

Calendar.getInstance().getTime();
Calendar의 인스턴스를 생성하여 Calendar 객체의 getTime() 메소드를 호출해 현재시간을 추출하였습니다.

 

 

 

포맷 지정

SimpleDateFormat formatter = new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분 ss초");
String formatedNow = formatter.format(now);

Date now = Calendar.getInstance().getTime(); 부분에서 확인할 수 있듯이, getTime() 메소드가 리턴하는 객체가 Date 타입이기 때문에 SimpleDateFormat 클래스를 이용하여 포맷팅 하였습니다.

 

 

 

 

 

 

 

 

 

JAVA8 이후


JAVA8 이후부터는 java.time 패키지의 클래스들을 이용해 날짜와 시간을 표현할 수 있습니다.

또한, java.time.format.DateTimeFormatter 클래스를 이용해 날짜와 시간을 원하는 형식으로 추출할 수 있습니다.

 

1. java.time.LocalDate

java.time.LocalDate 클래스는 날짜를 표현하는 클래스입니다.

import java.time.LocalDate;
import java.time.ZoneId;

public class CurrentDateTime {
    public static void main(String[] args) {
        
        // 현재 날짜 구하기 (시스템 시계, 시스템 타임존)
        LocalDate now = LocalDate.now();
        
        // 지역별 현재 날짜 구하기
        LocalDate SeoulNow = LocalDate.now(ZoneId.of("Asia/Seoul"));
        LocalDate LondonNow = LocalDate.now(ZoneId.of("Europe/London"));
        LocalDate VancouverNow = LocalDate.now(ZoneId.of("America/Vancouver"));
        
        // 결과 출력
        System.out.println(now); // 2022-05-03
        System.out.println(SeoulNow); // 2022-05-03
        System.out.println(LondonNow); // 2022-05-03
        System.out.println(VancouverNow); // 2022-05-02
        
        
        // 포맷 정의
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
        // 포맷 적용
        String formatedNow = now.format(formatter);
        // 결과 출력
        System.out.println(formatedNow); // 2022/05/03
        
        
        // 연도, 월(문자열, 숫자), 일, 일(year 기준), 요일(문자열, 숫자)
        int year = now.getYear();
        String month = now.getMonth().toString();
        int monthValue = now.getMonthValue();
        int dayOfMonth = now.getDayOfMonth();
        int dayOfYear = now.getDayOfYear();
        String dayOfWeek = now.getDayOfWeek().toString();
        int dayOfWeekValue = now.getDayOfWeek().getValue();
        // 결과 출력
        System.out.println(now); // 2022-05-03
        System.out.println(year); // 2022
        System.out.println(month + "(" + monthValue + ")"); // MAY(5)
        System.out.println(dayOfMonth); // 03
        System.out.println(dayOfYear); // 122
        System.out.println(dayOfWeek + "(" + dayOfWeekValue + ")"); // TUESDAY(2)

    }
}

현재 날짜

LocalDateNow(); 

코드를 통하여 시스템에 default로 지정된 시간과 타임존을 이용해 현재 날짜를 추출합니다.

 

지역별 날짜

LocalDateNow(ZoneId.of("Asia/Seoul"));

LocalDateNow(ZoneId.of("Europe/London"));

LocalDateNow(ZoneId.of("America/Vancouver"));

코드를 통하여 서울, 런던, 밴쿠버의 시간 적용하여 해당 지역의 시간을 가지고 올 수 있습니다.

 

포맷 지정

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");

String formatedNow = now.format(formatter);

코드에서 확인 가능하듯이, DateTimeFormatter 클래스를 이용해 원하는 포맷으로 날짜를 추출할 수 있습니다.

 

년, 월, 일, 몇 번째 날인지, 요일

int year = now.getYear();

코드를 통해 연도를 추출합니다.

 

String month = now.getMonth().toString();

getMonth() 메소드는 해당 월을 나타내는, java.time.Month Enum을 리턴합니다.

리턴 받은 Month 객체의 toString() 메소드를 이용해 월 이름을 추출합니다. Month 객체를 사용해 월을 숫자로 출력하고 싶다면, now.getMonth().getValue() 를 사용하여 추출합니다.

 

int monthValue = now.getMonthValue();

월을 숫자로 표현하기 위해 now.getMonth().getValue()를 사용할 수도 있고, LocalDate 객체의 getMonthValue() 메소드를 사용할 수 있습니다.

 

int dayOfMonth = now.getDayOfMonth();

int dayOfYear = now.getDayOfYear();

월, 년의 몇 번째 날인지를 int로 추출합니다.

 

String dayOfWeek = now.getDayOfWeek().toString();

getDayOfWeek() 메소드는 요일을 나타낼 수 있는 DayOfWeek Enum 객체를 리턴합니다. 그리고, DayOfWeek 객체의 toString() 메소드를 이용해, 요일을 텍스트로 출력합니다.

 

int dayOfWeekValue = now.getDayOfWeek().getValue();

DayOfWeek 객체의 getValue() 메소드를 사용하여 요일을 숫자로 변환할 수 있습니다. 월요일(1) ~ 일요일(7)을 리턴합니다.

 

 

 

 

2. java.time.LocalTime

java.time.LocalTime 클래스는 시간을 표현하는 클래스입니다.

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class CurrentDateTime {
    public static void main(String[] args) {
        
        // 현재 시간
        LocalTime now = LocalTime.now();
        // 현재시간 출력
        System.out.println(now); // 15:45:57.008731300
        
        // 포맷 정의하기
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH시 mm분 ss초");
        // 포맷 적용하기
        String formatedNow = now.format(formatter);
        // 포맷 적용된 현재 시간 출력
        System.out.println(formatedNow); // 15시 45분 57초
        
        // 시, 분, 초 구하기
        int hour = now.getHour();
        int minute = now.getMinute();
        int second = now.getSecond();
        // 시, 분, 초 출력
        System.out.println(hour); // 15
        System.out.println(minute); // 45
        System.out.println(second); // 57

    }
}

현재 시간 구하기 / 포맷팅 / 시, 분, 초

LocalTime.now();

LocalTime.now() 메소드를 사용하여 현재 시간을 추출합니다.

 

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH시 mm분 ss초");
String formatedNow = now.format(formatter);

DateTimeFormatter클래스를 이용해 시간을 원하는 포맷의 문자열로 변환합니다.

 

int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();

getHour(), getMinute(), getSecond() 메소드를 이용해 시, 분, 초를 추출할 수 있습니다.

 

 

 

3. java.time.LocalDateTime

java.time.LocalDateTime 클래스는 날짜와 시간을 표현하는 클래스입니다.

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class CurrentDateTime {
    public static void main(String[] args) {
        
        // 현재 날짜/시간
        LocalDateTime now = LocalDateTime.now();
        // 현재 날짜/시간 출력
        System.out.println(now); // 2022-05-03T15:52:21.419878100
        
        // 포맷팅
        String formatedNow = now.format(DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초"));
        // 포맷팅 현재 날짜/시간 출력
        System.out.println(formatedNow); // 2022년 05월 03일 15시 52분 21초
        
        // 년, 월(문자열, 숫자), 일(월 기준, 년 기준), 요일(문자열, 숫자), 시, 분, 초 구하기
        int year = now.getYear(); // 연도
        String month = now.getMonth().toString(); // 월(문자열)
        int monthValue = now.getMonthValue(); // 월(숫자)
        int dayOfMonth = now.getDayOfMonth(); // 일(월 기준)
        int dayOfYear = now.getDayOfYear(); // 일(년 기준)
        String dayOfWeek = now.getDayOfWeek().toString(); // 요일(문자열)
        int dayOfWeekValue = now.getDayOfWeek().getValue(); // 요일(숫자)
        int hour = now.getHour();
        int minute = now.getMinute();
        int second = now.getSecond();
        
        // 년, 월(문자열, 숫자), 일(월 기준, 년 기준), 요일(문자열, 숫자), 시, 분, 초 출력
        System.out.println("년 : " + year); // 년 : 2022
        System.out.println("월 : " + month + "(" + monthValue + ")"); // 월 : MAY(5)
        System.out.println("일(월기준) : " + dayOfMonth); // 일(월기준) : 03
        System.out.println("일(년기준) : " + dayOfYear); // 일(년기준) : 122
        System.out.println("요일 : " + dayOfWeek + "(" + dayOfWeekValue + ")"); // 요일 : TUESDAY(2)
        System.out.println("시간 : " + hour); // 시간 : 15
        System.out.println("분 : " + minute); // 분 : 53
        System.out.println("초 : " + second); // 초 : 35
    }
}

LocalDate, LocalTime 클래스에서 년, 월, 일, 요일, 시, 분, 초를 각각 추출했던 거와 같이 LocalDateTime 클래스의 메소드를 이용해 추출할 수 있습니다.

반응형

댓글