산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

Java 날짜와 시간 마스터하기: 생성자, 메서드 및 모범 사례

Java는 java.util 패키지에서 Date 클래스를 제공하며, 이 클래스는 현재 날짜와 시간을 캡슐화합니다.

Date 클래스는 다음 표와 같이 두 가지 생성자를 지원합니다.

번호 생성자 & 설명
1

Date( )

현재 날짜와 시간으로 객체 초기화.

2

Date(long millisec)

1970년 1월 1일 자정부터 경과한 밀리초 수와 같은 인자 수용.

다음은 Date 클래스의 메서드들입니다.

번호 메서드 & 설명
1

boolean after(Date date)

호출 Date 객체가 date로 지정된 날짜보다 나중이면 true, 아니면 false 반환.

2

boolean before(Date date)

호출 Date 객체가 date로 지정된 날짜보다 이전이면 true, 아니면 false 반환.

3

Object clone( )

호출 Date 객체 복제.

4

int compareTo(Date date)

호출 객체 값과 date 비교. 값이 같으면 0, 호출 객체가 이전이면 음수, 나중이면 양수 반환.

5

int compareTo(Object obj)

obj가 Date 클래스면 compareTo(Date)와 동일 작동. 아니면 ClassCastException 발생.

6

boolean equals(Object date)

호출 Date 객체가 date로 지정된 것과 같은 시간과 날짜면 true, 아니면 false.

7

long getTime( )

1970년 1월 1일 이후 경과한 밀리초 수 반환.

8

int hashCode( )

호출 객체의 해시 코드 반환.

9

void setTime(long time)

1970년 1월 1일 자정부터 경과한 밀리초인 time으로 시간과 날짜 설정.

10

String toString( )

호출 Date 객체를 문자열로 변환하여 반환.

현재 날짜와 시간 얻기

Java에서 현재 날짜와 시간을 얻는 매우 쉬운 방법입니다. 간단한 Date 객체에 toString() 메서드를 사용하여 현재 날짜와 시간을 출력할 수 있습니다:

예제

Live Demo
import java.util.Date;
public class DateDemo {
  public static void main(String args[]) {
    // Date 객체 인스턴스화
    Date date = new Date();
    // toString()으로 시간과 날짜 표시
    System.out.println(date.toString());
  }
}

이 코드는 다음 결과를 생성합니다:

출력

on May 04 09:51:52 CDT 2009

날짜 비교

두 날짜를 비교하는 세 가지 방법은 다음과 같습니다:

SimpleDateFormat을 사용한 날짜 포맷팅

SimpleDateFormat은 로케일 민감한 방식으로 날짜를 포맷팅하고 파싱하기 위한 구체적인 클래스입니다. 사용자 정의 패턴으로 날짜-시간 포맷팅을 시작할 수 있습니다.

예제

Live Demo
import java.util.*;
import java.text.*;
public class DateDemo {
  public static void main(String args[]) {
    Date dNow = new Date();
    SimpleDateFormat ft = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
    System.out.println("Current Date: " + ft.format(dNow));
  }
}

이 코드는 다음 결과를 생성합니다:

출력

Current Date: Sun 2004.07.18 at 04:14:09 PM PDT

SimpleDateFormat 포맷 코드

시간 포맷을 지정하려면 시간 패턴 문자열을 사용합니다. 이 패턴에서 모든 ASCII 문자는 패턴 문자로 예약되어 있으며 다음과 같이 정의됩니다:

문자설명예제
G연대 지정자AD
y4자리 연도2001
M년의 월July 또는 07
d월의 일10
h오전/오후 시간(1~12)12
H일의 시간(0~23)22
m시간의 분30
s분의 초55
S밀리초234
E주의 요일Tuesday
D년의 일360
F月の 주중 일2 (7월 둘째 수요일)
w년의 주40
W월의 주1
a오전/오후 마커PM
k일의 시간(1~24)24
K오전/오후 시간(0~11)10
z시간대Eastern Standard Time
'텍스트 이스케이프구분자
"작은따옴표`

printf를 사용한 날짜 포맷팅

날짜와 시간 포맷팅은 printf 메서드로 매우 쉽게 할 수 있습니다. t로 시작하고 다음 표의 문자 중 하나로 끝나는 두 글자 포맷을 사용합니다.

예제

Live Demo
import java.util.Date;
public class DateDemo {
  public static void main(String args[]) {
    Date date = new Date();
    String str = String.format("Current Date/Time : %tc", date);
    System.out.printf(str);
  }
}

이 코드는 다음 결과를 생성합니다:

출력

Current Date/Time : Sat Dec 15 16:37:57 MST 2012

날짜의 각 부분을 포맷하기 위해 여러 번 날짜를 제공해야 한다면 어리석은 일입니다. 그래서 포맷 문자열로 포맷할 인자의 인덱스를 지정할 수 있습니다.

인덱스는 % 바로 뒤에 와야 하고 $로 끝나야 합니다.

예제

Live Demo
import java.util.Date;
public class DateDemo {
  public static void main(String args[]) {
    Date date = new Date();
    System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
  }
}

이 코드는 다음 결과를 생성합니다:

출력

Due date: February 09, 2004

또는 < 플래그를 사용할 수 있습니다. 이는 앞선 포맷 명세의 같은 인자를 다시 사용함을 나타냅니다.

예제

Live Demo
import java.util.Date;
public class DateDemo {
  public static void main(String args[]) {
    Date date = new Date();
    System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
  }
}

이 코드는 다음 결과를 생성합니다:

출력

Due date: February 09, 2004

날짜/시간 변환 문자

문자설명예제
c완전한 날짜와 시간Mon May 04 09:51:52 CDT 2009
FISO 8601 날짜2004-02-09
D미국 형식 날짜(월/일/년)02/09/2004
T24시간제 시간18:05:19
r12시간제 시간06:05:19 pm
R초 없는 24시간제18:05
Y4자리 연도(앞자리 0 포함)2004
y연도 끝 두 자리(앞자리 0 포함)04
C연도 앞 두 자리(앞자리 0 포함)20
B전체 월 이름February
b약어 월 이름Feb
m두 자리 월(앞자리 0 포함)02
d두 자리 일(앞자리 0 포함)03
e두 자리 일(앞자리 0 없음)9
A전체 요일 이름Monday
a약어 요일 이름Mon
j년의 세 자리 일(앞자리 0 포함)069
H두 자리 시간(앞자리 0 포함), 00~2318
k두 자리 시간(앞자리 0 없음), 0~2318
I두 자리 시간(앞자리 0 포함), 01~1206
l두 자리 시간(앞자리 0 없음), 1~126
M두 자리 분(앞자리 0 포함)05
S두 자리 초(앞자리 0 포함)19
L세 자리 밀리초(앞자리 0 포함)047
N아홉 자리 나노초(앞자리 0 포함)047000000
P대문자 오전/오후 마커PM
p소문자 오전/오후 마커pm
zGMT로부터 RFC 822 숫자 오프셋-0800
Z시간대PST
s1970-01-01 00:00:00 GMT 이후 초1078884319
Q1970-01-01 00:00:00 GMT 이후 밀리초1078884319047

날짜와 시간 관련 다른 유용한 클래스들도 있습니다. 자세한 내용은 Java 표준 문서를 참조하세요.

문자열을 날짜로 파싱

SimpleDateFormat 클래스에는 주어진 SimpleDateFormat 객체에 저장된 포맷에 따라 문자열을 파싱하려는 parse() 메서드 등 추가 메서드들이 있습니다.

예제

Live Demo
import java.util.*;
import java.text.*;
public class DateDemo {
  public static void main(String args[]) {
    SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
    String input = args.length == 0 ? "1818-11-11" : args[0];
    System.out.print(input + " Parses as ");
    Date t;
    try {
      t = ft.parse(input);
      System.out.println(t);
    } catch (ParseException e) {
      System.out.println("Unparseable using " + ft);
    }
  }
}

위 프로그램의 샘플 실행 결과:

출력

1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818

잠시 대기하기

컴퓨터 수명까지 1밀리초부터 원하는 기간만큼 대기할 수 있습니다. 예를 들어 다음 프로그램은 3초 동안 대기합니다:

예제

Live Demo
import java.util.*;
public class SleepDemo {
  public static void main(String args[]) {
    try {
      System.out.println(new Date() + "\n");
      Thread.sleep(5*60*10);
      System.out.println(new Date() + "\n");
    } catch (Exception e) {
      System.out.println("Got an exception!");
    }
  }
}

이 코드는 다음 결과를 생성합니다:

출력

Sun May 03 18:04:41 GMT 2009
Sun May 03 18:04:51 GMT 2009

경과 시간 측정

가끔 밀리초 단위의 시점을 측정해야 할 수 있습니다. 위 예제를 다시 작성해보겠습니다:

예제

Live Demo
import java.util.*;
public class DiffDemo {
  public static void main(String args[]) {
    try {
      long start = System.currentTimeMillis();
      System.out.println(new Date() + "\n");
      Thread.sleep(5*60*10);
      System.out.println(new Date() + "\n");
      long end = System.currentTimeMillis();
      long diff = end - start;
      System.out.println("Difference is : " + diff);
    } catch (Exception e) {
      System.out.println("Got an exception!");
    }
  }
}

이 코드는 다음 결과를 생성합니다:

출력

Sun May 03 18:16:51 GMT 2009
Sun May 03 18:16:57 GMT 2009
Difference is : 5993

GregorianCalendar 클래스

GregorianCalendar는 익숙한 일반 그레고리력 달력을 구현한 Calendar 클래스의 구체적 구현체입니다. 이 튜토리얼에서는 Calendar 클래스를 다루지 않았으며, 표준 Java 문서에서 찾아볼 수 있습니다.

Calendar의 getInstance() 메서드는 기본 로케일과 시간대의 현재 날짜와 시간으로 초기화된 GregorianCalendar를 반환합니다. GregorianCalendar는 AD와 BC 두 필드를 정의합니다. 이는 그레고리력에서 정의된 두 시대입니다.

GregorianCalendar 객체에는 여러 생성자도 있습니다:

번호 생성자 & 설명
1

GregorianCalendar()

기본 시간대/로케일의 현재 시간으로 기본 GregorianCalendar 구성.

2

GregorianCalendar(int year, int month, int date)

기본 시간대/로케일에서 주어진 날짜로 설정된 GregorianCalendar 구성.

3

GregorianCalendar(int year, int month, int date, int hour, int minute)

기본 시간대/로케일에서 주어진 날짜와 시간으로 설정된 GregorianCalendar 구성.

4

GregorianCalendar(int year, int month, int date, int hour, int minute, int second)

기본 시간대/로케일에서 주어진 날짜와 시간으로 설정된 GregorianCalendar 구성.

5

GregorianCalendar(Locale aLocale)

기본 시간대에서 현재 시간, 주어진 로케일로 GregorianCalendar 구성.

6

GregorianCalendar(TimeZone zone)

주어진 시간대에서 현재 시간, 기본 로케일로 GregorianCalendar 구성.

7

GregorianCalendar(TimeZone zone, Locale aLocale)

주어진 시간대와 로케일로 GregorianCalendar 구성.

GregorianCalendar 클래스가 제공하는 몇 가지 유용한 지원 메서드들:

번호 메서드 & 설명
1

void add(int field, int amount)

달력 규칙에 따라 지정된 시간 필드에 지정된 (부호 있는) 시간량 추가.

2

protected void computeFields()

UTC 밀리초를 시간 필드 값으로 변환.

3

protected void computeTime()

시간 필드 값을 UTC 밀리초로 변환.

4

boolean equals(Object obj)

이 GregorianCalendar를 객체 참조와 비교.

5

int get(int field)

주어진 시간 필드 값 가져오기.

6

int getActualMaximum(int field)

현재 날짜 기준으로 이 필드가 가질 수 있는 최대값 반환.

7

int getActualMinimum(int field)

현재 날짜 기준으로 이 필드가 가질 수 있는 최소값 반환.

8

int getGreatestMinimum(int field)

필드가 가변적이면 최고 최소값 반환.

9

Date getGregorianChange()

그레고리력 변경 날짜 가져오기.

10

int getLeastMaximum(int field)

필드가 가변적이면 최저 최대값 반환.

11

int getMaximum(int field)

주어진 필드의 최대값 반환.

12

Date getTime()

이 Calendar의 현재 시간 가져오기.

13

long getTimeInMillis()

이 Calendar의 현재 시간을 long으로 가져오기.

14

TimeZone getTimeZone()

시간대 가져오기.

15

int getMinimum(int field)

주어진 필드의 최소값 반환.

16

int hashCode()

hashCode 오버라이드.

17

boolean isLeapYear(int year)

주어진 해가 윤년인지 판단.

18

void roll(int field, boolean up)

더 큰 필드 변경 없이 주어진 시간 필드에 시간 단위 1 증가/감소.

19

void set(int field, int value)

주어진 값으로 시간 필드 설정.

20

void set(int year, int month, int date)

연도, 월, 일 필드 값 설정.

21

void set(int year, int month, int date, int hour, int minute)

연도, 월, 일, 시, 분 필드 값 설정.

22

void set(int year, int month, int date, int hour, int minute, int second)

연도, 월, 일, 시, 분, 초 필드 값 설정.

23

void setGregorianChange(Date date)

그레고리력 변경 날짜 설정.

24

void setTime(Date date)

주어진 Date로 이 Calendar의 현재 시간 설정.

25

void setTimeInMillis(long millis)

주어진 long 값으로 이 Calendar의 현재 시간 설정.

26

void setTimeZone(TimeZone value)

주어진 시간대 값으로 시간대 설정.

27

String toString()

이 달력의 문자열 표현 반환.

예제

Live Demo
import java.util.*;
public class GregorianCalendarDemo {
  public static void main(String args[]) {
    String months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
    int year;
    // 기본 로케일과 시간대의 현재 날짜/시간으로 초기화된 그레고리력 달력 생성
    GregorianCalendar gcalendar = new GregorianCalendar();
    // 현재 시간과 날짜 정보 표시
    System.out.print("Date: ");
    System.out.print(months[gcalendar.get(Calendar.MONTH)]);
    System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
    System.out.println(year = gcalendar.get(Calendar.YEAR));
    System.out.print("Time: ");
    System.out.print(gcalendar.get(Calendar.HOUR) + ":");
    System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
    System.out.println(gcalendar.get(Calendar.SECOND));
    // 현재 해가 윤년인지 테스트
    if(gcalendar.isLeapYear(year)) {
      System.out.println("The current year is a leap year");
    } else {
      System.out.println("The current year is not a leap year");
    }
  }
}

이 코드는 다음 결과를 생성합니다:

출력

Date: Apr 22 2009
Time: 11:25:27
The current year is not a leap year

Calendar 클래스에서 사용 가능한 상수 전체 목록은 표준 Java 문서를 참조하세요.

java

  1. C# 클래스와 객체: 견고한 OOP를 위한 기초 다지기
  2. Python 현재 날짜와 시간 가져오기: 실전 가이드
  3. Java 변수와 리터럴: 종합 가이드
  4. Java 표현식, 문장, 블록 이해하기
  5. Java 클래스와 객체: 실전 가이드
  6. Java 추상 클래스와 메서드 완벽 가이드
  7. Java 중첩/내부 클래스 마스터: 종류, 예제, 모범 사례
  8. Java 싱글톤 패턴 완벽 가이드: 안전하게 구현하고 사용하기
  9. Java throw vs throws: 예외 처리 실전 예제로 마스터하기
  10. Java 오토박싱과 언박싱 마스터하기: 실전 예제와 모범 사례