자바 날짜 시간


java.util 패키지는 현재 날짜와 시간을 캡슐화하는 Date 클래스를 제공합니다. Date 클래스는 Date 객체를 인스턴스화하는 두 개의 생성자를 제공합니다.

첫 번째 생성자는 현재 날짜와 시간을 사용하여 객체를 초기화합니다.

Date( )

두 번째 생성자는 1970년 1월 1일 이후의 밀리초 수인 매개변수를 받습니다.

Date(long millisec)

Date 객체가 생성된 후 다음 메소드를 호출할 수 있습니다.

                일련번호                 방법 및 설명
                  1부울 이후(날짜 날짜)
이 메소드를 호출하는 Date 객체가 지정된 날짜 이후이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
                2부울 이전(날짜 날짜)
이 메소드를 호출하는 Date 객체가 지정된 날짜 이전이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
                3객체 복제( )
이 객체의 복사본을 반환합니다.
                4int CompareTo(날짜 날짜)
이 메서드가 호출될 때 Date 객체와 지정된 날짜를 비교합니다. 둘이 같으면 0이 반환됩니다. 호출 객체가 지정된 날짜 이전이면 음수가 반환됩니다. 호출 개체는 지정된 날짜 이후에 양수를 반환합니다.
                5int CompareTo(객체 obj)
obj가 Date 유형인 경우 작업은 CompareTo(Date)와 동일합니다. 그렇지 않으면 ClassCastException이 발생합니다.
                6부울 같음(개체 날짜)
이 메소드를 호출하는 Date 객체가 지정된 날짜와 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
                7긴 getTime( )
1970년 1월 1일 00:00:00 GMT 이후 이 Date 객체가 나타내는 밀리초 수를 반환합니다.
                8int 해시코드( )
이 객체의 해시 코드 값을 반환합니다.
                9setTime을 무효화(오랜 시간)

1970년 1월 1일 00:00:00 GMT 이후 시간과 날짜를 밀리초 단위로 설정합니다.
                10String 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);
   }
}

날짜 및 시간 변환 문자

CharacterDescription
                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의 많은 클래스는 실제로 이 아이디어를 채택합니다.

DescriptionCalendar. Calendar.MONTHMonthCalendar.DATEDateCalendar.DAY_OF_MONTHDate는 위 필드와 의미가 같습니다
Calendar.HOUR 12시 -시간 형식
Calendar.HOUR_OF_DAY24시간 형식의 시간
Calendar.MINUTEMinutes
Calendar.SECONDSeconds
Calendar.DAY_OF_WEEKweek 몇 개인가요?

캘린더 클래스 객체 정보 설정

설정 설정

예:

//创建一个代表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 개체의 여러 구성 방법은 다음과 같습니다.

일련 번호생성자 및 설명
                         1그레고리오력 달력()
기본 로캘과 기본 시간대의 현재 시간을 사용하여 기본 GregorianCalendar를 생성합니다.
                2GregorianCalendar(int 연도, int 월, int 날짜)
기본 로케일
                        3GregorianCalendar(int 연도, int 월, int 날짜, int 시간, int 분)
기본 로케일의 기본 시간대에 대해 지정된 날짜 및 시간 설정을 사용하여 GregorianCalendar를 생성합니다.
                4GregorianCalendar(int 연도, int 월, int 날짜, int 시, int 분, int 초)
기본 로케일의 기본 시간대에 대해 지정된 날짜 및 시간 설정을 사용하여 GregorianCalendar를 생성합니다.
                5GregorianCalendar(Locale aLocale)
지정된 로케일의 기본 시간대의 현재 시간을 기반으로 GregorianCalendar를 생성합니다.
                6GregorianCalendar(TimeZone zone)
기본 로캘을 사용하여 지정된 시간대의 현재 시간을 기반으로 GregorianCalendar를 생성합니다.
                7GregorianCalendar(TimeZone zone, Locale aLocale)
지정된 로케일을 사용하여 지정된 시간대의 현재 시간을 기반으로 GregorianCalendar를 생성합니다.

다음은 GregorianCalendar 클래스에서 제공하는 몇 가지 유용한 메서드 목록입니다.

일련번호방법 및 지침
                       1void add(int 필드, int 금액)
달력 규칙에 따라 지정된 달력 필드에 지정된(서명된) 시간을 추가합니다.
                2보호된 무효 계산 필드()
UTC 밀리초 값을 시간 도메인 값으로 변환
                        3protected void 계산 시간()
달력을 재정의하고 시간 도메인 값을 UTC 밀리초 값으로 변환합니다
​​​​​​​​ 4부울 같음(객체 obj)
이 GregorianCalendar를 지정된 개체와 비교합니다.
                5int get(int 필드)
지정된 필드의 시간 값을 가져옵니다
​​​​​​​​ 6int getActualMaximum(int 필드)
현재 날짜, 해당 필드의 최대값을 반환합니다.
                        7int getActualMinimum(int 필드)
현재 날짜, 해당 필드의 최소값을 반환합니다.
                      8int getGreatestMinimum(int 필드)
이 GregorianCalendar 인스턴스의 지정된 달력 필드에 대해 가장 높은 최소값을 반환합니다.
                9날짜 getGregorianChange()
그레고리력 변경 날짜를 가져옵니다.
                10int getLeastMaximum(int 필드)
이 GregorianCalendar 인스턴스에 대해 지정된 달력 필드의 가장 낮은 최대값을 반환합니다.
                      11int getMaximum(int 필드)
이 GregorianCalendar 인스턴스에 대해 지정된 달력 필드의 최대값을 반환합니다.
                12날짜 getTime()
달력의 현재 시간을 가져옵니다.
                13long getTimeInMillis()
긴 정수로 표현된 달력의 현재 시간을 가져옵니다.
                      14TimeZone getTimeZone()
시간대를 가져옵니다.
                15int getMinimum(int 필드)
해당 필드의 최소값을 반환합니다.