2013-09-23 2 views
5

현재 사용되지 않는 set 메소드 java.util.Date을 사용하고 있습니다. 내가 그것을 떠나기를 원할 때 대안과 대안은 무엇이며 어떤 장점이 있습니까?java.util.Date의 대안

Date은 오늘 일어난 모든 것을 선택하는 HQL 쿼리에 대해 오늘 자정으로 설정해야합니다.

은 현재 내가 사용

Date startingDate = new Date(); 
startingDate.setHours(0); 
startingDate.setMinutes(0); 
startingDate.setSeconds(0); 
+2

javadoc ... 그 명확하게'Calendar.set' 메쏘드는 대체물이됩니다. – sanbhat

+0

당신이하고 싶은 것을 좀 더 추상적으로 묘사하면보다 직접적인 조언을 줄 수 있습니다. –

+0

나는 Hibernate 쿼리에서이 날짜 변수를 사용하여 오전 12 시부 터 같은 날에 생성 된 레코드를 검색한다. –

답변

7

참고 :이 답변은 더 이상 정확한 자바 8 이후는, 지금 better date/calendar API이 가능성이 높습니다.

표준 대체품은 Calendar 개체를 사용하고 있습니다.

Calendar cal = Calendar.getInstance(); // that is NOW for the timezone configured on the computer. 
cal.set(Calendar.HOUR, 0); 
cal.set(Calendar.MINUTES, 0); 
cal.set(Calendar.SECONDS, 0); 
Date startingDate = cal.getTime(); 

Calendar

은 추가 라이브러리없이 올 수있는 장점이 널리 이해된다. 또한 Calendar의 문서는 여기에서 찾을 수 있습니다 Date

Javadoc에서 문서화 된 대안 : Javadoc

Calendar이 (조심성) 하나 개의 위험 지점을 가지고 있으며, 그것은 after/before 방법이다. 그들은 Object을 사용하지만 Calendar 개의 객체 만 올바르게 처리합니다. 이러한 메소드를 사용하기 전에 Javadoc을 자세히 읽으십시오.

Calendar 개체를 일 (cal.add(Calendar.DAY_OF_YEAR, 1);)을 추가하거나 주 (cal.roll(Calendar.DAY_OF_WEEK, 1);) 등을 통해 "스크롤"하는 것과 같은 방식으로 변환 할 수 있습니다. 전체 그림을 얻으려면 Javadoc에서 클래스 설명을 읽으십시오.

Date date = new DateMidnight().toDate();  // today at 00:00 

이 (가) DateMidnight 사용되지 않는 수에-방지하려면 :

+2

그리고'# set' 메소드가 있습니다 : http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#set(int, int, int, int, int, int) – RJo

3

가장 좋은 대안이 (가) Joda Time API 사용하는 것입니다

Date date = new DateTime().withMillisOfDay(0).toDate(); 
+0

OP가 Joda에 대해 말한 것을 수행하는 방법을 보여주는 코드를 추가 할 수 있습니까? –

+0

DateMidnight()는 최신 joda 빌드 –

+0

에서 사용되지 않습니다. 내 편집을 참조하십시오 :) –

0

당신은 joda 라이브러리 날짜 사용할 수 있습니다, 당신은 유연성을 많이 얻을 것이다 그. 그렇지 않은 경우는, 커스텀 데이트를 작성하기 위해서 java.util.Calendar를 사용할 수 있습니다.

0

날짜가 사용되지 않습니다 그 이유는 제대로 국제화를 처리하지 않습니다.

JDK 1.1 이전의 클래스에는 두 가지 추가 기능이있었습니다. 그것은 년의 해석을 년, 월, 일,시, 분, 및 두 번째 값으로 허용했습니다. 또한 문자열의 형식 및 구문 분석을 문자열 으로 허용했습니다. 불행히도 이러한 함수의 API는 국제화에 을 적용 할 수 없습니다. JDK 1 이후.1에서 Calendar 클래스는 날짜와 시간 필드 사이를 변환하는 데 사용되는 이어야하고 DateFormat 클래스 은 날짜 문자열을 형식화하고 구문 분석하는 데 사용해야합니다. Date에 해당하는 메소드가 사용되지 않습니다.

간단한 대안은 대신 java.util.Calendar을 사용하는 것입니다

Calendar calendar = Calendar.getInstance(); // get a calendar instance (current) 

하고 통화 는 Calendar.set (...) 방법.