자바 시간 날짜 상세 설명 및 인 스 턴 스
개요:
프로그램 은 입력-처리-출력 이다.데이터 에 대한 처 리 는 프로그래머 가 주의해 야 할 부분 으로 빠 르 고 효율 적 으로 데 이 터 를 처리 할 때 우리 의 추구 이다.그 중에서 시간 과 날짜 의 처리 가 특히 중요 하고 평범 합 니 다.이번 에는 자바 의 시간 과 날짜 처리 방식 을 간단하게 분석 하여 앞으로 의 학습 에 대한 메 모 를 하고 초보 자 에 게 참고 가 될 것 입 니 다.
시간,영어 시간;날짜,영어 날짜;달력자바 에 서 는 의미 화 를 중시 하고 이상 의 이름 으로 시간 날짜 함수 와 관련 류 를 명명 합 니 다.
우 리 는 자바 가 가지 고 있 는 시간 날짜 류 와 그 중의 처리 함수 로 분석 할 것 이다.
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 를 이용 하여 시간 과 날짜 의 조작 처 리 를 진행 하 세 요!
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.여러분,본 사이트 에 대한 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.