2010-03-04 3 views
12

특정 날짜, 월 및 연도를 사용하여 날짜 개체를 구성하는 가장 효율적인 방법은 무엇인지 알 수 있습니까?날짜 구성 - 효율적인 방법

Date(int year, int month, int day) 

이 구문은 상각됩니다. 따라서, 나는 보통 할 것입니다 :

Calendar calendar = Calendar.getInstance(); 
Date date = calendar.set(year, month, date).getTime(); 

그러나, 나의 이해는 Calendar.getInstance()가 오히려 비싸다는 것이다. Date 객체를 생성하는 가장 효율적인 방법은 무엇입니까? 아니면 나머지를 말하지 않고 조용히 Date (int year, int month, int day)를 사용해야합니까?

제 3 자 라이브러리 사용을 제안하지 마십시오.

+1

타사 라이브러리를 사용하지 않은 특별한 이유가 있습니까? Joda Time은 내장 된 것보다 * 훨씬 * 좋은 API입니다. 당신이 그것을 사용하지 않을 정말로, 정말로 좋은 이유가 없다면, 나는 당신이 그것에 뛰어들 것을 강력히 권한다. –

+1

예. 10 점 중 9 점이 Joda Time을 사용하여 나에게 제안 할 것입니다. 그것이 제 3 자 라이브러리에 대한 언급을하지 않는 이유입니다. –

+0

라이브러리를 원하지 않는다면 꽤 많이 갇혀있는 것 같아요. 일반적으로 5 명의 개발자 중 4 명이 Joda Time을 날짜 관련 추천으로 추천합니다. – sfussenegger

답변

15

이 기능을 사용하여 "지금은 시간"인 인스턴스 생성을 피할 수 있습니다.

Date coolDate = new GregorianCalendar(year, month, day).getTime(); 

당신은 다른 생성자에 대한 GregorianCalendar를 javadoc의를 확인할 수 있습니다. 날짜 + 시간 및 시간대가 있습니다.

어쨌든 Jon Skeet의 의견에 비하면 그렇게 비싸지 않습니다. 나는 코드가 디폴트 "now"초기화를 필요로하지 않는다는 것에 동의한다. 당신이 오래는 자바 표준 API에있어, 그것은이 Calendar를 사용합니다 (Date 생성자와 SimpleDateFormat 내부적으로 사용 둘 다)을 포함 할 것이다, 사용, 그래서 그 클래스의 가정의 비 효율성에 대해 초조해 아무 소용이 없다 무엇이든

+0

+1 직접 제작하는 것이지만 특정 캘린더를 사용할 때는주의해야합니다. – medopal

+0

예. 일, 월, 년을 사용하는 것은 사용되는 캘린더에 대한 지식을 의미한다는 것을 이해합니다 (그러나 DMY의 일반적인 처리 인 경우 캘린더를 생성 할 수있는 방법이 없습니다 ... :) – helios

+1

Calendar.getInstance)'는 로케일 고유의 차이점을 허용하는 것입니다. 'GregorianCalendar'를 작성하면 (자), 코드의 1 행을 보존 할 수있는 이점이 있습니다. 생성을 정적 팩토리 메서드에 넣는 것이 낫습니다. – cletus

6

"다소 비쌉니다"는 다소 모호합니다. 당신은 실제로 당신이 제공 한 코드를 사용하여 그것을 시험해 보았습니다. 그리고 비싸다는 것을 알았습니까? 이 작전을 얼마나 싸게해야하는지 구체적으로 알고 있습니까?

또한 Date의 값을 표시 할 시간대를 지정하지 않았습니다. UTC? 기본 시간대는 무엇입니까? 자정 또는 현재 시간 중 원하는 시간은 언제입니까? 현재 코드는 기존 시간을 유지합니다. 실제로 원하는 것입니까?

(주석에서 언급했듯이 Joda Time으로 이동할 것을 강력히 권할 것입니다. 그러나 그렇지 않은 경우에도 실제로 찾고있는 전에 기존 코드에 문제가 있는지 여부를 확인해야합니다.)

+2

Joda 시간이 아마도 과잉입니다. 캘린더와 관련하여 "비싼"것은 JDK 1.4 일 동안 지속 되어온 사실입니다. 나는 그것을 시험 할 때까지의 오랜 생각과 똑같은 오해를 겪어 왔으며 수십만 가지의 문제를 쉽게 상상할 수있었습니다. – cletus

+2

@cletus : Joda Time을 추천 한 이유 중 대부분은 속도를 향상시키는 것이 아니라 더 나은 API를 사용하는 것입니다. 나는 그가 날짜를 만들면 그것을 사용하려고한다고 가정합니다. Joda 시간은 단순히 날짜와 시간, 기간을 처리하는 더 좋은 방법입니다. –

+1

Joda Time이 jQuery가 Javascript가 된 Java가되었는지 궁금해하고 있습니다. 항상 제안되는 것이 있습니다. :) – cletus

1

.

1

단순히 이런 짓을 했을까 :

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
Date thisDate = formatter.parse("2010-03-04"); 

을 그것은 코드의 관점의 라인에서 매우 효율적입니다; 나는 달력과의 런타임 효율성에 대해 말할 수 없다.

관련 문제