자바 날짜 시간
java.util 패키지는 현재 날짜와 시간을 캡슐화하는 Date 클래스를 제공합니다. Date 클래스는 Date 객체를 인스턴스화하는 두 개의 생성자를 제공합니다.
첫 번째 생성자는 현재 날짜와 시간을 사용하여 객체를 초기화합니다.
Date( )
두 번째 생성자는 1970년 1월 1일 이후의 밀리초 수인 매개변수를 받습니다.
Date(long millisec)
Date 객체가 생성된 후 다음 메소드를 호출할 수 있습니다.
일련번호 | 방법 및 설명 |
---|---|
1 | 부울 이후(날짜 날짜) 이 메소드를 호출하는 Date 객체가 지정된 날짜 이후이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. |
2 | 부울 이전(날짜 날짜) 이 메소드를 호출하는 Date 객체가 지정된 날짜 이전이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. |
3 | 객체 복제( ) 이 객체의 복사본을 반환합니다. |
4 | int CompareTo(날짜 날짜) 이 메서드가 호출될 때 Date 객체와 지정된 날짜를 비교합니다. 둘이 같으면 0이 반환됩니다. 호출 객체가 지정된 날짜 이전이면 음수가 반환됩니다. 호출 개체는 지정된 날짜 이후에 양수를 반환합니다. |
5 | int CompareTo(객체 obj) obj가 Date 유형인 경우 작업은 CompareTo(Date)와 동일합니다. 그렇지 않으면 ClassCastException이 발생합니다. |
6 | 부울 같음(개체 날짜) 이 메소드를 호출하는 Date 객체가 지정된 날짜와 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. |
7 | 긴 getTime( ) 1970년 1월 1일 00:00:00 GMT 이후 이 Date 객체가 나타내는 밀리초 수를 반환합니다. |
8 | int 해시코드( ) 이 객체의 해시 코드 값을 반환합니다. |
9 | setTime을 무효화(오랜 시간) 1970년 1월 1일 00:00:00 GMT 이후 시간과 날짜를 밀리초 단위로 설정합니다. |
10 | String toString( ) Date 객체를 문자열 표현으로 변환하고 문자열을 반환합니다. |
현재 날짜 및 시간 가져오기
Java에서 현재 날짜 및 시간을 가져오는 것은 매우 간단합니다. 아래와 같이 Date 개체의 toString() 메서드를 사용하여 현재 날짜 및 시간을 인쇄합니다.
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.import java.util.Date; public class DateDemo { public static void main(String args[]) { // 初始化 Date 对象 Date date = new Date(); // 使用 toString() 函数显示日期时间 System.out.println(date.toString()); } }Date Comparison
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은 로케일을 구분하는 방식으로 날짜 형식을 지정하고 구문 분석하는 클래스입니다. SimpleDateFormat을 사용하면 실행할 사용자 정의 날짜 및 시간 형식을 선택할 수 있습니다. 예:
Mon May 04 09:51:52 CDT 2013
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
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)); } }Simple DateFormat 형식 인코딩
시간 패턴 문자열은 시간 형식을 지정하는 데 사용됩니다. 이 모드에서는 모든 ASCII 문자가 다음과 같이 정의된 패턴 문자로 예약됩니다.
편지 | 설명 | 예 |
---|---|---|
G | 신기원 | 광고 |
y | 4자리 연도 | 2001년 |
M | 월 | 7월 또는 07 |
d | 날짜 | 10 |
ㅋㅋㅋ | A.M./P.M.(1~12) 형식 시간 | 12 |
H | 시간(0~23) | 22 |
m | 분 | 30 |
s | 초 | 55 |
S | 밀리초 수 | 234 |
E | 요일 | 화요일 |
D | 연중 일수 | 360 |
F | 매월 요일 | 2(7월 둘째 수요일) |
w | 연중 주 | 40 |
W | 이번 달의 주 | 1 |
a | A.M./P.M. 표시 | PM |
k | 시간대(1~24) | 24 |
K | A.M./P.M.(0~11) 형식 시간 | 10 |
z | 시간대 | 동부 표준시 |
' | 텍스트 구분 기호 | 구분 기호 |
" | 작은따옴표 | `` |
printf를 사용하여 날짜 형식 지정
printf 방법을 사용하면 시간과 날짜 형식을 쉽게 지정할 수 있습니다. t로 시작하고 아래 표의 문자로 끝나는 두 글자 형식을 사용합니다. 예:
Current Date: Sun 2004.07.18 at 04:14:09 PM PDT
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
import java.util.Date; public class DateDemo { public static void main(String args[]) { // 初始化 Date 对象 Date date = new Date(); // 使用toString()显示日期和时间 String str = String.format("Current Date/Time : %tc", date ); System.out.printf(str); } }
날짜를 반복적으로 제공해야 하는 경우 날짜의 각 부분을 이런 방식으로 형식화하는 것은 약간 복잡합니다. 따라서 형식 문자열을 사용하여 형식화할 매개변수의 인덱스를 나타낼 수 있습니다.
인덱스는 % 바로 뒤에 있어야 하며 $로 끝나야 합니다. 예:
Current Date/Time : Sat Dec 15 16:37:57 MST 2012
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
import java.util.Date; public class DateDemo { public static void main(String args[]) { // 初始化 Date 对象 Date date = new Date(); // 使用toString()显示日期和时间 System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date); } }
또는 < 기호를 사용할 수 있습니다. 이는 이전에 형식화된 매개변수가 다시 사용됨을 나타냅니다. 예:
Due date: February 09, 2004
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
import java.util.Date; public class DateDemo { public static void main(String args[]) { // 初始化 Date 对象 Date date = new Date(); // 显示格式化时间 System.out.printf("%s %tB %<te, %<tY", "Due date:", date); } }
날짜 및 시간 변환 문자
Character | Description | 예 |
c | 전체 날짜 및 시간 | 5월 4일 월요일 09:51:52 CDT 2009 |
F | ISO 8601 형식 날짜 | 2004-02-09 |
D | 미국 형식의 날짜(월/일/년) | 2004년 2월 9일 |
T | 24시간 | 18:05:19 |
r | 12시간 | 오후 06:05:19 |
R | 초를 제외한 24시간 | 18:05 |
Y | 4자리 연도(앞에 0 포함) | 2004 |
y | 연도의 마지막 2자리(앞에 0 포함) | 04 |
ㅋ | 연도의 처음 2자리(앞에 0 포함) | 20 |
B | 달의 전체 이름 | 2월 |
b | 월 약어 | 2월 |
n | 2자리 월(앞에 0 포함) | 02 |
d | 2자리 날짜(앞에 0 포함) | 03 |
e | 날짜 2자리(선행 0 제외) | 9 |
A | 주의 전체 이름 | 월요일 |
a | 주의 약어 | 월요일 |
j | 3자리 연도(앞에 0 포함) | 069 |
H | 2자리 시간(앞에 0 포함), 00~23 | 18 |
k | 2자리 시간(선행 0 제외), 0~23 | 18 |
나 | 2자리 시간(앞에 0 포함), 01~12 | 06 |
엘 | 2자리 시간(선행 0 제외), 1~12 | 6 |
M | 2자리 분(앞에 0 포함) | 05 |
S | 2자리 초(앞에 0 포함) | 19 |
L | 밀리초 3자리(선행 0 포함) | 047 |
N | 9비트 나노초(선행 0 포함) | 047000000 |
P | 대문자 오후 기호 | PM |
p | 소문자 대문자 오후 기호 | pm |
z | GMT 기준 RFC 822 디지털 오프셋 | -0800 |
Z | 시간대 | PST |
s | 1970-01-01 00:00:00 GMT 이후의 초 수 | 1078884319 |
Q | 1970년 1월 1일 00:00:00 GMT 이후 | 1078884319047 |
그 밖에도 날짜와 시간에 관련된 유용한 수업이 있습니다. 자세한 내용은 Java 표준 문서를 참조하세요.
문자열을 시간으로 구문 분석
SimpleDateFormat 클래스에는 특정 SimpleDateFormat 개체의 형식화된 저장소에 따라 문자열을 구문 분석하는 구문 분석()과 같은 몇 가지 추가 메서드가 있습니다. 예:
Due date: February 09, 2004
위 예제 컴파일 및 실행 결과는 다음과 같습니다.
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); } } }
Java sleep(sleep)
sleep()은 현재 스레드를 정체 상태로 만들고(현재 스레드 차단) 사용을 포기합니다. CPU의 목적은 현재 스레드가 프로세스에서 얻은 CPU 리소스를 점유하여 다른 스레드가 실행될 수 있도록 일정 시간을 남겨 두는 것이 아닙니다.
1밀리초 동안 또는 컴퓨터가 지속되는 동안 프로그램을 절전 모드로 설정할 수 있습니다. 예를 들어 다음 프로그램은 3초 동안 절전 모드로 전환됩니다.
$ java DateDemo 1818-11-11 Parses as Wed Nov 11 00:00:00 GMT 1818 $ java DateDemo 2007-12-01 2007-12-01 Parses as Sat Dec 01 00:00:00 GMT 2007
위 예제는 다음과 같이 컴파일 및 실행됩니다.
import java.util.*; public class SleepDemo { public static void main(String args[]) { try { System.out.println(new Date( ) + "\n"); Thread.sleep(1000*3); // 休眠3秒 System.out.println(new Date( ) + "\n"); } catch (Exception e) { System.out.println("Got an exception!"); } } }
Measure time
다음 예제에서는 시간 간격(밀리초)을 측정하는 방법을 보여줍니다. :
Thu Sep 17 10:20:30 CST 2015 Thu Sep 17 10:20:33 CST 2015
위 예제 컴파일 및 실행 결과는 다음과 같습니다.
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!"); } } }
Calendar 클래스
이제 날짜 개체의 형식을 지정하고 생성할 수 있지만, 날짜 개체의 특정 부분을 어떻게 설정하고 가져올 수 있습니까? 시간, 일 또는 분과 같은 날짜 데이터에 대한 답은 Calendar 클래스를 사용하는 것입니다.
Calendar 클래스는 Date 클래스보다 훨씬 강력하며 구현도 Date 클래스보다 더 복잡합니다.
Calendar 클래스는 실제 사용 시 특정 하위 클래스의 객체를 구현하는 추상 클래스입니다. 객체 생성 과정은 프로그래머에게 투명하며 getInstance 메서드를 사용해서만 생성하면 됩니다.
시스템의 현재 날짜를 나타내는 Calendar 개체 만들기
Fri Jan 08 09:48:47 CST 2016 Fri Jan 08 09:48:50 CST 2016 Difference is : 3019
지정된 날짜를 가진 Calendar 개체 만들기
Calendar 클래스를 사용하여 특정 시간을 나타내려면 먼저 Calendar 개체를 만든 다음 설정해야 합니다. 완료할 개체 매개변수의 연도, 월, 일입니다.
Calendar c = Calendar.getInstance();//默认是当前日期
Calendar 클래스 객체 필드 유형
이러한 상수는 Calendar 클래스에서 다양한 의미를 나타내는 데 사용됩니다. jdk의 많은 클래스는 실제로 이 아이디어를 채택합니다.
Calendar. | |||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Calendar.MONTH | Month | ||||||||||||||||||||||||||||||||||||||||||||||||
Calendar.DATE | Date | ||||||||||||||||||||||||||||||||||||||||||||||||
Calendar.DAY_OF_MONTH | Date는 위 필드와 의미가 같습니다 | ||||||||||||||||||||||||||||||||||||||||||||||||
Calendar.HOUR | 12시 -시간 형식 | ||||||||||||||||||||||||||||||||||||||||||||||||
Calendar.HOUR_OF_DAY | 24시간 형식의 시간 | ||||||||||||||||||||||||||||||||||||||||||||||||
Calendar.MINUTE | Minutes | ||||||||||||||||||||||||||||||||||||||||||||||||
Calendar.SECOND | Seconds | ||||||||||||||||||||||||||||||||||||||||||||||||
Calendar.DAY_OF_WEEK | week 몇 개인가요? | ||||||||||||||||||||||||||||||||||||||||||||||||
캘린더 클래스 객체 정보 설정설정 설정 예: //创建一个代表2009年6月12日的Calendar对象 Calendar c1 = Calendar.getInstance(); c1.set(2009, 6 - 1, 12); Call: Calendar c1 = Calendar.getInstance(); public final void set(int year,int month,int date) 필드 유형 설정 사용 날짜 값과 같은 특정 필드만 설정하는 경우 다음을 사용할 수 있습니다. 다음 설정 방법 : c1.set(2009, 6 - 1, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12 c1 객체가 나타내는 날짜를 10일로 설정하면 다른 모든 값은 다시 계산됩니다. public void set(int field,int value) c1 객체가 나타내는 연도를 2008년으로 설정하면 다른 모든 값은 recalculated c1.set(Calendar.DATE,10); 기타 필드 속성 집합의 의미는 이렇게 유추할 수 있습니다 Add settings c1.set(Calendar.YEAR,2008); c1 객체의 날짜에 10을 더해 즉, c1은 10일 후의 날짜로 표현되며, 그리고 다른 모든 값은 다시 계산됩니다 Calendar c1 = Calendar.getInstance(); c1 더하기 개체의 날짜에서 10을 뺍니다. 즉, c1은 10일 전 날짜로 표현되고 다른 모든 값은 다시 계산됩니다 c1.add(Calendar.DATE, 10); 다른 필드 속성 추가의 의미는 유추를 통해 유추할 수 있습니다 Calendar 클래스 객체 정보 획득<pre>c1.add(Calendar.DATE, -10); GregorianCalendar 클래스Calendar 클래스는 그레고리력을 구현하고 GregorianCalendar는 Calendar 클래스의 특정 구현입니다. Calendar의 getInstance() 메서드는 기본적으로 현재 로캘 및 시간대로 초기화된 GregorianCalendar 개체를 반환합니다. GregorianCalendar는 AD와 BC라는 두 개의 필드를 정의합니다. 이는 그레고리력으로 정의된 두 시대를 나타냅니다. GregorianCalendar 개체의 여러 구성 방법은 다음과 같습니다.
다음은 GregorianCalendar 클래스에서 제공하는 몇 가지 유용한 메서드 목록입니다.
|