java.util 패키지는 현재 날짜와 시간을 캡슐화하는 Date 클래스를 제공합니다. Date 클래스는 Date 객체를 인스턴스화하는 두 개의 생성자를 제공합니다.
첫 번째 생성자는 현재 날짜와 시간으로 개체를 초기화합니다.
날짜( )
두 번째 생성자는 1970년 1월 1일 이후의 밀리초 수인 매개 변수를 받습니다.
날짜(긴 밀리초)
Date 객체가 생성된 후 다음 메서드를 호출할 수 있습니다.
일련번호 | 방법 및 설명 |
---|---|
1 | boolean after(Date date)는 이 메서드를 호출하는 Date 객체가 지정된 날짜 이후이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. |
2 | boolean before(Date date)는 이 메서드를 호출하는 Date 객체가 지정된 날짜 이전이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. |
3 | 객체 복제( )는 이 객체의 복사본을 반환합니다. |
4 | int CompareTo(Date date)는 이 메서드가 지정된 날짜와 함께 호출될 때 Date 객체를 비교합니다. 둘이 같으면 0이 반환됩니다. 호출 객체가 지정된 날짜 이전이면 음수가 반환됩니다. 호출 개체는 지정된 날짜 이후에 양수를 반환합니다. |
5 | int CompareTo(Object obj) obj가 Date 유형인 경우 작업은 CompareTo(Date)와 동일합니다. 그렇지 않으면 ClassCastException이 발생합니다. |
6 | boolean equals(Object date)는 이 메서드를 호출하는 Date 객체가 지정된 날짜와 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. |
7 | long getTime()은 1970년 1월 1일 00:00:00 GMT 이후 이 Date 객체가 나타내는 밀리초 수를 반환합니다. |
8 | int hashCode()는 이 객체의 해시 코드 값을 반환합니다. |
9 | void setTime(long time)은 1970년 1월 1일 00:00:00 GMT 이후의 밀리초 수를 사용하여 시간과 날짜를 설정합니다. |
10 | String toString()은 Date 객체를 String 표현으로 변환하고 해당 문자열을 반환합니다. |
Java에서 현재 날짜와 시간을 가져오는 것은 아래와 같이 매우 간단합니다. Date 개체의 toString() 메서드를 사용하여 현재 날짜와 시간을 인쇄합니다.
java.util.Date 가져오기;
공개 클래스 메인{
공개 정적 무효 메인(문자열 인수[]) {
//Date 객체 초기화 Date date = new Date();
//toString() 함수를 사용하여 날짜와 시간을 표시합니다. System.out.println(date.toString());
}
}
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
2013년 5월 4일 월요일 09:51:52 CDT
Java는 다음 세 가지 방법을 사용하여 두 날짜를 비교합니다.
getTime() 메서드를 사용하여 두 날짜(1970년 1월 1일 이후의 밀리초 수)를 가져온 다음 두 값을 비교합니다.
before(), after() 및 equals() 메서드를 사용합니다. 예를 들어, 12일이 18일보다 빠르면 new Date(99, 2, 12).before(new Date (99, 2, 18))는 true를 반환합니다.
Comparable 인터페이스에 의해 정의된 CompareTo() 메서드를 사용하고 Date 클래스가 이 인터페이스를 구현합니다.
SimpleDateFormat은 로케일을 구분하는 방식으로 날짜 형식을 지정하고 구문 분석하는 클래스입니다. SimpleDateFormat을 사용하면 실행할 사용자 정의 날짜 및 시간 형식을 선택할 수 있습니다. 예를 들어:
import java.util.*;
import java.text.*;
공개 클래스 메인{
공개 정적 무효 메인(문자열 인수[]) {
Date dNow = new Date( );
SimpleDateFormat ft =
new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("현재 날짜: " + ft.format(dNow));
}
}
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
현재 날짜: 2004년 7월 18일 일요일 오후 4시 14분 9초(PDT)
시간 패턴 문자열은 시간 형식을 지정하는 데 사용됩니다. 이 모드에서는 모든 ASCII 문자가 다음과 같이 정의된 패턴 문자로 예약됩니다.
편지 | 설명하다 | 예 |
---|---|---|
G | 에포크마크 | 광고 |
와이 | 네 자리 연도 | 2001년 |
중 | 월 | 7월 또는 07 |
디 | 월의 날짜 | 10 |
시간 | AM/PM(1~12) 형식의 시간 | 12 |
시간 | 시간(0~23) | 스물 둘 |
중 | 분 | 30 |
에스 | 초 | 55 |
에스 | 밀리초 | 234 |
이자형 | 요일 | 화요일 |
디 | 올해의 일 | 360 |
에프 | 해당 월의 요일 | 2(7월 둘째 수요일) |
승 | 올해의 주 | 40 |
여 | 이번 달의 주 | 1 |
에이 | 오전/오후 표시 | 오후 |
케이 | 시간(1~24) | 스물넷 |
케이 | AM/PM(0~11) 형식의 시간 | 10 |
지 | 시간대 | 동부 표준시 |
' | 텍스트 구분 기호 | 구분 기호 |
" | 작은따옴표 | ` |
printf 메소드를 사용하면 시간과 날짜 형식을 쉽게 지정할 수 있습니다. t로 시작하고 아래 표의 문자로 끝나는 두 글자 형식을 사용합니다. 예를 들어:
java.util.Date 가져오기;
공개 클래스 메인{
공개 정적 무효 메인(문자열 인수[]) {
//Date 객체 초기화 Date date = new Date();
// 날짜와 시간을 표시하려면 toString()을 사용하십시오. String str = String.format("현재 날짜/시간 : %tc", date );
System.out.printf(str);
}
}
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
현재 날짜/시간: 2012년 12월 15일 토요일 16:37:57 MST
날짜를 반복적으로 제공해야 하는 경우 각 부분의 형식을 이런 방식으로 지정하는 것은 약간 복잡합니다. 따라서 형식 문자열을 사용하여 형식화할 매개변수의 인덱스를 나타낼 수 있습니다.
인덱스는 % 바로 뒤에 있어야 하며 $로 끝나야 합니다. 예를 들어:
java.util.Date 가져오기;
공개 클래스 메인{
공개 정적 무효 메인(문자열 인수[]) {
//Date 객체 초기화 Date date = new Date();
// 날짜와 시간을 표시하려면 toString()을 사용합니다. System.out.printf("%1$s %2$tB %2$td, %2$tY",
"마감일:", 날짜);
}
}
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
마감일: 2004년 2월 9일
또는 < 플래그를 사용할 수 있습니다. 이는 이전에 형식화된 매개변수가 다시 사용됨을 나타냅니다. 예를 들어:
java.util.Date 가져오기;
공개 클래스 메인{
공개 정적 무효 메인(문자열 인수[]) {
//Date 객체 초기화 Date date = new Date();
// 포맷 시간 표시 System.out.printf("%s %tB %<te, %<tY",
"마감일:", 날짜);
}
}
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
마감일: 2004년 2월 9일
성격 | 설명하다 | 예 |
기음 | 완전한 날짜와 시간 | 2009년 5월 4일 월요일 09:51:52 CDT |
에프 | ISO 8601 형식 날짜 | 2004-02-09 |
디 | 미국 형식의 날짜(월/일/년) | 2004년 2월 9일 |
티 | 24시간 | 18:05:19 |
아르 자형 | 12시간 | 오후 06:05:19 |
아르 자형 | 초를 제외한 24시간제 | 18:05 |
와이 | 4자리 연도(앞에 0 포함) | 2004년 |
와이 | 연도 마지막 2자리(앞의 0 포함) | 04 |
기음 | 연도의 처음 2자리(앞의 0 포함) | 20 |
비 | 달의 전체 이름 | 2월 |
비 | 월 약어 | 2월 |
N | 2자리 월(앞에 0 포함) | 02 |
디 | 2자리 날짜(앞에 0 포함) | 03 |
이자형 | 2자리 날짜(선행 0 제외) | 9 |
에이 | 주의 전체 이름 | 월요일 |
에이 | 주 약어 | 월 |
j | 3자리 연도(앞에 0 포함) | 069 |
시간 | 2자리 시간(선행 0 포함), 00~23 | 18 |
케이 | 2자리 시간(선행 0 제외), 0~23 | 18 |
나 | 2자리 시간(앞에 0 포함), 01~12 | 06 |
엘 | 2자리 시간(선행 0 제외), 1~12 | 6 |
중 | 2자리 분(앞에 0 포함) | 05 |
에스 | 2자리 초(앞에 0 포함) | 19 |
엘 | 밀리초 3자리(선행 0 포함) | 047 |
N | 9비트 나노초(선행 0 포함) | 047000000 |
피 | 대문자 오후 기호 | 오후 |
피 | 소문자 대문자 오후 기호 | 오후 |
지 | GMT의 RFC 822 디지털 오프셋 | -0800 |
지 | 시간대 | 태평양 표준시 |
에스 | 1970-01-01 00:00:00 GMT 이후의 초 수 | 1078884319 |
큐 | 1970년 1월 1일 00:00:00 GMT 이후 | 1078884319047 |
다른 유용한 날짜 및 시간 관련 클래스가 있습니다. 자세한 내용은 Java 표준 문서를 참조하세요.
SimpleDateFormat 클래스에는 주어진 SimpleDateFormat 객체의 형식화된 저장소에 따라 문자열을 구문 분석하려고 시도하는 몇 가지 추가 메서드, 특히 구문 분석(parse())이 있습니다. 예를 들어:
import java.util.*;
import java.text.*;
공개 클래스 메인{
공개 정적 무효 메인(문자열 인수[]) {
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
문자열 입력 = args.length == 0 ? "1818-11-11" : args[0];
System.out.print(input + " 다음으로 구문 분석함 ");
날짜 t;
노력하다 {
t = ft.parse(입력);
System.out.println(t);
} 잡기(ParseException e) {
System.out.println("" + ft를 사용하여 구문 분석할 수 없습니다);
}
}
}
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
$javaDate데모
1818-11-11 1818년 11월 11일 수요일 00:00:00 GMT로 구문 분석합니다.
$ java DateDemo 2007-12-01
2007-12-01 2007년 12월 1일 토요일 00:00:00 GMT로 구문 분석
자바 수면(수면)
1000분의 1초 동안 또는 컴퓨터가 지속되는 동안 프로그램을 절전 모드로 전환할 수 있습니다. 예를 들어, 다음 프로그램은 3초 동안 휴면 상태입니다.
import java.util.*;
공개 클래스 메인{
공개 정적 무효 메인(문자열 인수[]) {
노력하다 {
System.out.println(new Date( ) + "n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "n");
} 잡기(예외 e) {
System.out.println("예외가 발생했습니다!");
}
}
}
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
2009년 5월 3일 일요일 18:04:41 GMT
2009년 5월 3일 일요일 18:04:44 GMT
아래 예는 시간 간격을 밀리초 단위로 측정하는 방법을 보여줍니다.
import java.util.*;
공개 클래스 메인{
공개 정적 무효 메인(문자열 인수[]) {
노력하다 {
긴 시작 = System.currentTimeMillis( );
System.out.println(new Date( ) + "n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "n");
긴 끝 = System.currentTimeMillis( );
긴 diff = 끝 - 시작;
System.out.println("차이는 : " + diff);
} 잡기(예외 e) {
System.out.println("예외가 발생했습니다!");
}
}
}
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
2009년 5월 3일 일요일 18:16:51 GMT
2009년 5월 3일 일요일 18:16:54 GMT
차이점은: 3050
이제 날짜 객체의 형식을 지정하고 생성할 수 있지만, 시간, 일, 분과 같은 날짜 데이터의 특정 부분을 어떻게 설정하고 가져올 수 있습니까? 그리고 날짜의 이러한 부분에서 값을 어떻게 더하거나 뺄 수 있습니까? ? 대답은 Calendar 클래스를 사용하는 것입니다.
Calendar 클래스는 Date 클래스보다 훨씬 더 강력하며 구현도 Date 클래스보다 더 복잡합니다.
Calendar 클래스는 실제 사용 시 특정 하위 클래스의 객체를 구현하는 추상 클래스입니다. 객체 생성 프로세스는 프로그래머에게 투명하며 getInstance 메서드를 사용하여 생성하기만 하면 됩니다.
Calendar c = Calendar.getInstance();//기본값은 현재 날짜입니다.
Calendar 클래스를 사용하여 특정 시간을 나타내려면 먼저 Calendar 개체를 만든 다음 개체에 연도, 월, 일 매개 변수를 설정하여 완료해야 합니다.
//2009년 6월 12일을 나타내는 Calendar 객체 생성 Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);
이러한 상수는 다양한 의미를 나타내기 위해 Calendar 클래스에서 사용됩니다. jdk의 많은 클래스는 실제로 이 아이디어를 채택합니다.
끊임없는 | 설명하다 |
---|---|
달력.연도 | 연령 |
달력.MONTH | 월 |
달력.DATE | 날짜 |
달력.DAY_OF_MONTH | 날짜는 위 필드와 완전히 동일한 의미를 갖습니다. |
달력.HOUR | 12시간제의 시간 |
달력.HOUR_OF_DAY | 24시간제의 시간 |
달력.MINUTE | 분 |
캘린더.SECOND | 두번째 |
달력.DAY_OF_WEEK | 요일 |
설정하기
좋다:
캘린더 c1 = Calendar.getInstance();
부르다:
공개 최종 무효 세트(int 년, in 월, in 날짜)
c1.set(2009, 6 - 1, 12);//Calendar 객체 c1의 연도, 월, 일을 2009, 5, 12로 설정합니다.
필드 유형 설정 사용
날짜와 같은 특정 필드의 값만 설정하는 경우 다음 설정 메소드를 사용할 수 있습니다.
공개 무효 집합(int 필드, int 값)
c1 객체가 나타내는 날짜를 10일로 설정하면 다른 모든 값이 다시 계산됩니다.
c1.set(Calendar.DATE,10);
c1 객체가 나타내는 연도를 2008년으로 설정하면 다른 모든 값이 다시 계산됩니다.
c1.set(Calendar.YEAR,2008);
다른 필드 속성 집합의 의미는 비유를 통해 추론할 수 있습니다.
설정 추가
캘린더 c1 = Calendar.getInstance();
c1 개체의 날짜에 10을 더합니다. 이는 c1이 나타내는 날짜로부터 10일 후의 날짜입니다. 다른 모든 값은 다시 계산됩니다.
c1.add(Calendar.DATE, 10);
c1 개체의 날짜에서 10을 뺍니다. 이는 c1이 나타내는 날짜보다 10일 전의 날짜입니다. 다른 모든 값은 다시 계산됩니다.
c1.add(Calendar.DATE, -10);
다른 필드 속성에 대한 추가의 의미는 비유를 통해 추론할 수 있습니다.
캘린더 c1 = Calendar.getInstance();
// 연도 가져오기 int year = c1.get(Calendar.YEAR);
// 월 구하기 int Month = c1.get(Calendar.MONTH) + 1;
// 날짜 가져오기 int date = c1.get(Calendar.DATE);
// 시간 가져오기 int hour = c1.get(Calendar.HOUR_OF_DAY);
// 분 가져오기 int Minute = c1.get(Calendar.MINUTE);
// 두 번째 int 가져오기 second = c1.get(Calendar.SECOND);
// 요일을 가져옵니다. (참고(Date 클래스와 다릅니다): 1은 일요일을 나타내고, 2는 1주차를 나타내고, 3은 화요일을 나타냅니다.)
int day = c1.get(Calendar.DAY_OF_WEEK);
Calendar 클래스는 그레고리력을 구현하고 GregorianCalendar는 Calendar 클래스의 특정 구현입니다.
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 min) 기본 로케일의 기본 시간대에 대해 지정된 날짜 및 시간 설정을 사용하여 GregorianCalendar를 생성합니다. |
4 | GregorianCalendar(int year, int Month, int date, int hour, int min, 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()은 Calendar를 재정의하고 시간 도메인 값을 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) 이 GregorianCalendar 인스턴스의 지정된 달력 필드에 대한 가장 높은 최소값을 반환합니다. |
9 | Date getGregorianChange() 그레고리력의 변경 날짜를 가져옵니다. |
10 | int getLeastMaximum(int field) 이 GregorianCalendar 인스턴스에 대해 지정된 달력 필드의 가장 낮은 최대값을 반환합니다. |
11 | int getMaximum(int field) 이 GregorianCalendar 인스턴스에 대해 지정된 달력 필드의 최대값을 반환합니다. |
12 | Date getTime()은 달력의 현재 시간을 가져옵니다. |
13 | long getTimeInMillis()는 긴 정수로 표시되는 달력의 현재 시간을 가져옵니다. |
14 | TimeZone getTimeZone()은 시간대를 가져옵니다. |
15 | int getMinimum(int field)는 해당 필드의 최소값을 반환합니다. |
16 | int hashCode()는 hashCode를 재정의합니다. |
17 | boolean isLeapYear(int year)는 해당 연도가 윤년인지 여부를 결정합니다. |
18 | void Roll(int field, boolean up) 더 큰 필드를 변경하지 않고 주어진 시간 필드에서 단일 시간 단위를 더하거나 뺍니다(위/아래). |
19 | void set(int field, int value) 주어진 값으로 시간 필드를 설정합니다. |
20 | void set(int year, int Month, int date)는 연도, 월, 일 값을 설정합니다. |
스물 하나 | void set(int year, int Month, int date, int hour, int min)은 연도, 월, 일, 시, 분 값을 설정합니다. |
스물 둘 | void set(int year, int Month, int date, int hour, int min, int second)는 연도, 월, 일, 시, 분, 초 값을 설정합니다. |
스물셋 | void setGregorianChange(Date date)는 GregorianCalendar의 변경 날짜를 설정합니다. |
스물넷 | void setTime(Date date)은 달력의 현재 시간을 주어진 날짜로 설정합니다. |
25 | void setTimeInMillis(long millis)는 Calendar의 현재 시간을 주어진 긴 밀리초로 설정합니다. |
26 | void setTimeZone(TimeZone value) 주어진 시간대 값으로 현재 시간대를 설정합니다. |
27 | String toString()은 달력을 나타내는 문자열을 반환합니다. |
import java.util.*;
공개 클래스 GregorianCalendarDemo {
공개 정적 무효 메인(문자열 인수[]) {
문자열 월[] = {
"1월", "2월", "3월", "4월",
"5월", "6월", "7월", "8월",
"9월", "10월", "11월", "12월"};
연도;
// 그레고리력 초기화 // 현재 시간과 날짜 사용 // 기본값은 현지 시간과 시간대입니다. GregorianCalendar gcalendar = new GregorianCalendar();
// 현재 시간과 날짜 정보를 표시합니다. System.out.print("Date: ");
System.out.print(개월[gcalendar.get(Calendar.MONTH)]);
System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
System.out.println(연도 = gcalendar.get(Calendar.YEAR));
System.out.print("시간: ");
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("올해는 윤년입니다.");
}
또 다른 {
System.out.println("현재 연도는 윤년이 아닙니다.");
}
}
}
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
날짜: 2009년 4월 22일
시간: 11:25:27
금년은 윤년이 아니다.
Calender 클래스의 전체 목록을 보려면 표준 Java 설명서를 참조하세요.