자바 시간 날짜 상세 설명 및 인 스 턴 스

15900 단어 Java시간
Java 시간 날짜
개요:
프로그램 은 입력-처리-출력 이다.데이터 에 대한 처 리 는 프로그래머 가 주의해 야 할 부분 으로 빠 르 고 효율 적 으로 데 이 터 를 처리 할 때 우리 의 추구 이다.그 중에서 시간 과 날짜 의 처리 가 특히 중요 하고 평범 합 니 다.이번 에는 자바 의 시간 과 날짜 처리 방식 을 간단하게 분석 하여 앞으로 의 학습 에 대한 메 모 를 하고 초보 자 에 게 참고 가 될 것 입 니 다.
시간,영어 시간;날짜,영어 날짜;달력자바 에 서 는 의미 화 를 중시 하고 이상 의 이름 으로 시간 날짜 함수 와 관련 류 를 명명 합 니 다.
우 리 는 자바 가 가지 고 있 는 시간 날짜 류 와 그 중의 처리 함수 로 분석 할 것 이다.
1.시간 날짜 와 관련 된 클래스.
  java.util.Date。실현 클래스,대상 은 시간,날짜 구성 요 소 를 가지 고 있 습 니 다.
  java.util.Calendar。추상 클래스,대상 은 시간,날짜 구성 요 소 를 가지 고 있 습 니 다.
  java.sql.Date。실현 클래스,대상 은 날짜 구성 요 소 를 가지 고 있 습 니 다.
  java.sql.Time。실현 클래스,대상 은 시간 구성 요 소 를 가지 고 있 습 니 다.
  java.sql.Timestamp。구현 클래스,대상 은 시간 날짜 구성 요 소 를 가지 고 있 습 니 다.
  java.text.DateFormat。추상 클래스,대상 포맷 시간 날짜.
  java.text.DateFormatSymbols。클래스 를 구현 합 니 다.대상 은 포맷 시간 날짜 에 인 자 를 제공 합 니 다.
  (sun.util.*canlender*.*。System。Local。타임 존 등)
jdk 의 설치 가 모든 소스 코드 를 제공 하지 않 았 기 때문에 jdk 의 모든 소스 코드 를 가 져 오 는 것 을 추천 합 니 다:jdk6u 23-src.rar jdk7u4-src.rar。
2.유형 간 의 관계.
우 리 는 도해 와 일부 jdk 소스 코드 를 통 해 설명 한다. 
  
(위의 그림 에서 몇 가지 오류 가 있 습 니 다.Calendar 맞 춤 법 이 잘못 되 었 습 니 다.)
이상 의 그림 은 일부 상용 클래스 를 보 여 줍 니 다.우리 가 일반적으로 사용 하 는 클래스 java.util.date,java.util.Calendar,java.sql.Timestamp,java.text.dateFormat 은 시간 날짜 구성 요소 와 전면적 인 포맷 기능 을 가지 고 있 기 때문에 시간 날짜 조작 을 합 니 다.
주의해 야 할 것 은:java.sql.Date 에 시간 구성 요소 가 없습니다!자바.sql.Time 에는 날짜 구성 요소 가 없습니다!다시 한 번 일 깨 워 주다.무슨 뜻 이 죠?여러분 아래 의 코드 를 보 세 요.

public static void main(String[] args) {
     /*
     *                          。
     */
     java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());
     System.out.println(sqlDate.toString()); //     :2012-09-01
     java.sql.Time sqlTime = new java.sql.Time(System.currentTimeMillis());
     System.out.println(sqlTime.toString()); //     :12:35:11
     java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(System.currentTimeMillis());
     System.out.println(sqlTimestamp.toString()); //     :2012-09-01 12:36:33.544
     java.util.Date utilDate = new java.util.Date(System.currentTimeMillis());
     System.out.println(utilDate.toString()); //     :Sat Sep 01 12:37:34 CST 2012
     java.util.Calendar cl = java.util.Calendar.getInstance();
     System.out.println(cl.getTime().toString()); //     :Sat Sep 01 12:39:51 CST 2012
   }
보 실 수 있 습 니 다:java.util.Date,java.util.Calendar,java.sql.Timestamp 가 가지 고 있 는 시간 날짜 구성 요소(그리고 그들 은 무 참 구조 방법 을 가지 고 있 습 니 다),java.sql.Date 와 java.sql.Time 은 시간 이나 날짜 구성 요소 만 있 습 니 다.
이상 의 언론 을 증명 하기 위해 서,나 는 일부 jdk 소스 코드 를 여러분 이 참고 하도록 붙 여 드 리 겠 습 니 다.
java.sql.Date 소스 코드:

 package java.sql;
 
 
 public class Date extends java.util.Date {
 
   //       ……
 
   // Override all the time operations inherited from java.util.Date;
 
  /**
   * This method is deprecated and should not be used because SQL Date
   * values do not have a time component.
   *
   * @deprecated
   * @exception java.lang.IllegalArgumentException if this method is invoked
   * @see #setHours
   */
   public int getHours() {
     throw new java.lang.IllegalArgumentException();
   }
 
  /**
   * This method is deprecated and should not be used because SQL Date
   * values do not have a time component.
   *
   * @deprecated
   * @exception java.lang.IllegalArgumentException if this method is invoked
   * @see #setMinutes
   */
   public int getMinutes() {
     throw new java.lang.IllegalArgumentException();
   }
 
  /**
   * This method is deprecated and should not be used because SQL Date
   * values do not have a time component.
   *
  * @deprecated
   * @exception java.lang.IllegalArgumentException if this method is invoked
   * @see #setSeconds
   */
   public int getSeconds() {
     throw new java.lang.IllegalArgumentException();
   }
 
  /**
   * This method is deprecated and should not be used because SQL Date
   * values do not have a time component.
   *
   * @deprecated
   * @exception java.lang.IllegalArgumentException if this method is invoked
   * @see #getHours
   */
   public void setHours(int i) {
     throw new java.lang.IllegalArgumentException();
   }
 
  /**
  * This method is deprecated and should not be used because SQL Date
   * values do not have a time component.
  *
   * @deprecated
  * @exception java.lang.IllegalArgumentException if this method is invoked
  * @see #getMinutes
  */
  public void setMinutes(int i) {
    throw new java.lang.IllegalArgumentException();
   }
 
 /**
   * This method is deprecated and should not be used because SQL Date
  * values do not have a time component.
  *
   * @deprecated
   * @exception java.lang.IllegalArgumentException if this method is invoked
   * @see #getSeconds
   */
   public void setSeconds(int i) {
    throw new java.lang.IllegalArgumentException();
  }
 
  /**
   * Private serial version unique ID to ensure serialization
   * compatibility.
   */
   static final long serialVersionUID = 1511598038487230103L;
 }
java.sql.Time 소스 코드:

//        ……

  /**
  * This method is deprecated and should not be used because SQL <code>TIME</code>
  * values do not have a year component.
  *
  * @deprecated
  * @exception java.lang.IllegalArgumentException if this
  *      method is invoked
  * @see #setYear
  */
  @Deprecated
  public int getYear() {
    throw new java.lang.IllegalArgumentException();
  }

  /**
  * This method is deprecated and should not be used because SQL <code>TIME</code>
  * values do not have a month component.
  *
  * @deprecated
  * @exception java.lang.IllegalArgumentException if this
  *      method is invoked
  * @see #setMonth
  */
  @Deprecated
  public int getMonth() {
    throw new java.lang.IllegalArgumentException();
  }

  /**
  * This method is deprecated and should not be used because SQL <code>TIME</code>
  * values do not have a day component.
  *
  * @deprecated
  * @exception java.lang.IllegalArgumentException if this
  *      method is invoked
  */
  @Deprecated
  public int getDay() {
    throw new java.lang.IllegalArgumentException();
  }

  /**
  * This method is deprecated and should not be used because SQL <code>TIME</code>
  * values do not have a date component.
  *
  * @deprecated
  * @exception java.lang.IllegalArgumentException if this
  *      method is invoked
  * @see #setDate
  */
  @Deprecated
  public int getDate() {
    throw new java.lang.IllegalArgumentException();
  }

  /**
  * This method is deprecated and should not be used because SQL <code>TIME</code>
  * values do not have a year component.
  *
  * @deprecated
  * @exception java.lang.IllegalArgumentException if this
  *      method is invoked
  * @see #getYear
  */
  @Deprecated
  public void setYear(int i) {
    throw new java.lang.IllegalArgumentException();
  }

  /**
  * This method is deprecated and should not be used because SQL <code>TIME</code>
  * values do not have a month component.
  *
  * @deprecated
  * @exception java.lang.IllegalArgumentException if this
  *      method is invoked
  * @see #getMonth
  */
  @Deprecated
  public void setMonth(int i) {
    throw new java.lang.IllegalArgumentException();
  }

  /**
  * This method is deprecated and should not be used because SQL <code>TIME</code>
  * values do not have a date component.
  *
  * @deprecated
  * @exception java.lang.IllegalArgumentException if this
  *      method is invoked
  * @see #getDate
  */
  @Deprecated
  public void setDate(int i) {
    throw new java.lang.IllegalArgumentException();
  }

  /**
  * Private serial version unique ID to ensure serialization
  * compatibility.
  */
  static final long serialVersionUID = 8397324403548013681L;
}
위의 코드 를 통 해 알 수 있 듯 이 자바.sql.date 와 자바.sql.Time 은 확실히 완전한 구성 요 소 를 가지 고 있 지 않 습 니 다!
우 리 는 코드 를 다시 이용 하여 설명 한다.

public static void main(String[] args) {
    /*
     *                          。
     */
    java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());
    System.out.println(sqlDate.toString()); //     :2012-09-01
    java.sql.Time sqlTime = new java.sql.Time(System.currentTimeMillis());
    System.out.println(sqlTime.toString()); //     :12:35:11
    java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(System.currentTimeMillis());
    System.out.println(sqlTimestamp.toString()); //     :2012-09-01 12:36:33.544
    java.util.Date utilDate = new java.util.Date(System.currentTimeMillis());
    System.out.println(utilDate.toString()); //     :Sat Sep 01 12:37:34 CST 2012
    java.util.Calendar cl = java.util.Calendar.getInstance();
    System.out.println(cl.getTime().toString()); //     :Sat Sep 01 12:39:51 CST 2012
    
    /*
     *         java.sql.Date java.sql.Time        。 
     */
    System.out.println();
    try {
      System.out.println(sqlDate.getHours());
    } catch (Exception e) {
      System.out.println(e.getMessage()); //    null
    }
    try {
      System.out.println(sqlTime.getDate());
    } catch (Exception e) {
      System.out.println(e.getMessage()); //    null
    }
  }
실험 에 성공 하 였 습 니 다.모든 충 고 를 드 립 니 다.데이터베이스 시간 날짜 작업 을 할 때 자바.sql.Timestamp 류 를 사용 하 십시오.
간단 합 니 다.프로그램 에서 완전한 시간 날짜 작업 이 필요 하 다 면 자바 util.date+자바.text.dateFormat 을 사용 하 는 것 을 추천 합 니 다.
복잡 하거나 깊이 있 는 작업 이 필요 하 다 면 자바 util.Calendar 를 선택 하 십시오.어떤 사람 은 Calendar 가 Date 의 복잡 한 버 전이 라 고 말 하 는데,나 는 말 하 는 것 이 일리 가 있다 고 생각한다.우 리 는 그들의 의존 대상(원본 파일 에 도 입 된 외부 클래스)을 통 해 이 주장 을 증명 할 수 있다.
  java.util.Date:

package java.util;

import java.text.DateFormat;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.lang.ref.SoftReference;
import sun.util.calendar.BaseCalendar;
import sun.util.calendar.CalendarDate;
import sun.util.calendar.CalendarSystem;
import sun.util.calendar.CalendarUtils;
import sun.util.calendar.Era;
import sun.util.calendar.Gregorian;
import sun.util.calendar.ZoneInfo;
  java.util.Calendar:

package java.util;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OptionalDataException;
import java.io.Serializable;
import java.security.AccessControlContext;
import java.security.AccessController;
import java.security.PermissionCollection;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.security.ProtectionDomain;
import java.text.DateFormat;
import java.text.DateFormatSymbols;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import sun.util.BuddhistCalendar;
import sun.util.calendar.ZoneInfo;
import sun.util.resources.LocaleData;
java.util.Date 는 sun.util.*calendar*.*를 더 많이 사 용 했 습 니 다.자바.util.Calendar 는 그들 에 대한 의존 도가 적 고 Calendar 에 더 좋 은 포맷 기능 등 을 추 가 했 습 니 다.
사실 이렇게 많이 말 하 는 것 은 모두 쓸데없는 말이다.여러분 에 게 유용 한 것 은 두 가지 뿐 입 니 다.하 나 는 시간 날 짜 를 어떻게 얻 는 지,다른 하 나 는 사용자 정의 형식 에 따라 어떻게 표시 하 는 지 입 니 다.
이제 서 야 나 는 상기 두 가 지 를 설명 하 러 왔 다.
java.util.Date date=new java.util.Date()또는 java.util.Date date=java.util.Calendar.getInstance().getTime()을 통 해 java.util.Date 대상 을 얻 을 수 있 습 니 다.적어도 저 는 이렇게 하 는 것 을 추천 합 니 다.데이터베이스 와 접촉 하면 자바.sql.Timestamp 를 사용 합 니 다.
(실제로 jdk 는 자바 util.Date 대상 을 사용 하여 시간 날 짜 를 가 져 오 는 것 을 추천 하지 않 습 니 다.자바 util.Date 류 방법 설명 을 통 해 알 수 있 듯 이 기본 적 인 모든 방법 은@Deprecated 주석 이 있 습 니 다.방법 설명 대 의 는"JDK 1.1 부터 Calendar 의 정적 구성원 과 대상 구성원 을 사용 하여 시간 날 짜 를 조작 하 는 것 을 추천 합 니 다"입 니 다.나 는 그 중의 고려 가 나 쁜 의 미 를 피하 기 위해 서 라 고 생각한다.왜냐하면 Date 는 날짜 라 는 뜻 이기 때문이다)
자바.text.dateFormat 또는 그의 직접 구현 클래스 자바.text.Simple DateFormat 을 통 해 시간 날짜 의 포맷 을 실현 할 수 있 습 니 다.
다음 코드 는 시간 날 짜 를 포맷 하 는 방법 을 보 여 줍 니 다.

public static void main(String[] args) {
    /*
     *                          。
     */
    java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());
    System.out.println(sqlDate.toString()); //     :2012-09-01
    java.sql.Time sqlTime = new java.sql.Time(System.currentTimeMillis());
    System.out.println(sqlTime.toString()); //     :12:35:11
    java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(System.currentTimeMillis());
    System.out.println(sqlTimestamp.toString()); //     :2012-09-01 12:36:33.544
    java.util.Date utilDate = new java.util.Date(System.currentTimeMillis());
    System.out.println(utilDate.toString()); //     :Sat Sep 01 12:37:34 CST 2012
    java.util.Calendar cl = java.util.Calendar.getInstance();
    System.out.println(cl.getTime().toString()); //     :Sat Sep 01 12:39:51 CST 2012
    
    /*
     *         java.sql.Date java.sql.Time        。 
     */
    System.out.println();
    try {
      System.out.println(sqlDate.getHours());
    } catch (Exception e) {
      System.out.println(e.getMessage()); //    null
    }
    try {
      System.out.println(sqlTime.getDate());
    } catch (Exception e) {
      System.out.println(e.getMessage()); //    null
    }
    
    /*
     *                   。
     */
    System.out.println();
    java.text.DateFormat dateFormat = java.text.SimpleDateFormat.getInstance();
    // java.util.Date     
    System.out.println(utilDate.toString()); //   :Sat Sep 01 13:16:13 CST 2012
    // java.util.Date       
    System.out.println(dateFormat.format(sqlDate)); //   :12-9-1   1:16
    System.out.println();
    //                  ,        、         
    //   ,java.text.SimpleDateFormat          
    // SimpleDateFormat                                  
    java.text.SimpleDateFormat simpleDateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
    System.out.println(simpleDateFormat.format(sqlDate)); //   :2012-09-01 13:20:41   
  }
(나 는 편폭 을 차지 하기 위해 중복 코드 를 붙 인 것 이 아니다^ ^)
java.text.Simple DateFormat 의 format 방법 은 매개 변 수 를 사용 하여 강력 한 포맷 기능 을 제공 합 니 다.아래 표를 참조 하여 선택 할 수 있 습 니 다:
  
(위의 그림 에서 오류 가 발생 했 습 니 다.m 와 mm 에서 전 자 는 분 수가 10 보다 적 으 면 하나의 출력 위치 만 차지 합 니 다.즉,0-9 를 출력 하고 00-09 를 출력 하지 않 습 니 다)
자,여러분 서둘러 jdk 를 이용 하여 시간 과 날짜 의 조작 처 리 를 진행 하 세 요!
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.여러분,본 사이트 에 대한 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기