2009-03-13 8 views
6

자바에서 간단한 날짜 계산을하고 싶습니다. 예를 들어 날짜와 시간의 차이를 계산합니다 (시간 구성 요소가 0 개임). 물론 밀리 초 단위의 간단한 빼기를 일별 밀리 초 수로 나눠서 일광 절약 시간제가 장면에 입력 될 때까지 작업 할 수 있습니다. "시간 차이"에 대한 다른 해석이 가능하고, 특히 시간 구성 요소를 고려해야하는지 아닌지에 대해 저는 확신합니다. 단순화를 위해 0 시간 구성 요소가 있다고 가정합시다.간단한 자바 날짜 계산

이러한 종류의 계산은 매우 보편적 인 필요성이있는 것으로 보입니다. 질문에 대한 다양한 접근 방식에 대한 토론을하는 것이 좋습니다.

+0

JODA TIME !!!!!! (서두 르기 전에!) –

+0

[java.time] (http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html) !!!!!! –

답변

11

나는 Joda 날짜/시간 라이브러리, 특히 ReadableInterval 클래스를 살펴볼 것입니다.

Joda는 Java에서 날짜/시간을 조작 할 때 훨씬 쉽습니다. 새로운 Java의 기초라고 생각합니다. JSR 310 wrt. 날짜/시간. 즉 (또는 매우 유사한) 자바의 미래 버전에 존재할 것입니다.

+0

FYI의 [Joda-Time] (http://www.joda.org/joda-time/) 프로젝트는 현재 [유지 관리 모드] (https://en.wikipedia.org/wiki/Maintenance_mode)에 있으며 팀은 [java.time] (http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html) 클래스로의 마이그레이션을 권고합니다. [Tutorial by Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html)을 참조하십시오. –

1

Here is an article 자바에서 날짜/캘린더 기능을 사용하여 경과 시간을 계산하는 방법에 대해 논의합니다.

3

날짜, 캘린더 및 DateUtils가 원하는 모든 것을 처리합니다. http://commons.apache.org/lang/api/org/apache/commons/lang/time/DateUtils.html

DateUtils를 사용하면 시간 만 자르거나 반올림하여 날짜 만 처리 할 수 ​​있습니다. 또한 일광 절약 시간제를 언급했습니다. 가장 큰 문제는 누군가 DST 변경이 있었던 날 01:30에 뭔가를했다고 말한 것입니다 ... 01:30 이었습니까? 첫 번째 또는 두 번째? 다행스럽게도이 클래스는 표준 시간대와 DST 오프셋을 저장하기 때문에 Calendar 클래스에서 처리 할 수 ​​있습니다. 모든 사항에 대한 자세한 내용은 다음을 확인하십시오. http://www.xmission.com/~goodhill/dates/deltaDates.html

2

더 간단한 옵션은 Joda에서 일, 주, 월 및 연도 클래스를 사용하는 것입니다.

int daysDifference = Days.daysBetween(startInstant, endInstant).getDays(); 
+0

그리고 기존의'java.util.Date' 객체를'daysBetween'에 전달할 수있는'ReadableIntervals' 객체로 변환하려면 다음과 같이하면됩니다 :'new DateTime (somejavautild)' –

+0

FYI, [Joda-Time] (http : //www.joda.org/joda-time/) 프로젝트가 현재 [유지 관리 모드] (https://en.wikipedia.org/wiki/Maintenance_mode)에 있으며 팀에서 [java.time] (http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html) 클래스에 있습니다. [Tutorial by Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html)을 참조하십시오. –

1

이 java.time

현대적인 접근법은 java.time 클래스 함께 사용 번잡 한 기존 레거시 날짜 - 시간의 수업을 대신하고, :로

그런 식으로, 당신은 간단하게 뭔가를 할 수 .

연산 (0 시간 성분을 갖는) 기간을 사이에 일의 차가

LocalDate 클래스 시간 하루의 시간 영역없이없이 날짜 만 값을 나타낸다.

ChronoUnit enum에는 between과 같은 편리한 방법이 있습니다. 결말이 독점 동안 시작은 포함을 여기서 시간의 스팬을 정의

는 java.time 클래스는 반 공개 접근 방식을 사용합니다.

LocalDate start = LocalDate.of(2017 , Month.JANUARY , 23); 
LocalDate stop = LocalDate.of(2017 , Month.FEBRUARY , 17); 
long daysBetween = ChronoUnit.DAYS.between(start , stop); 

Period 클래스를 사용하여 해당 기간을 객체로 나타낼 수 있습니다.java.time

소개

Period p = Period.between(start , stop); 

java.time 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 java.util.Date, Calendar, & SimpleDateFormat과 같이 문제가있는 이전 legacy 날짜 - 시간 클래스를 대체합니다.

maintenance mode에있는 Joda-Time 프로젝트는 java.time 클래스로의 마이그레이션을 권장합니다.

자세히 알아 보려면 Oracle Tutorial을 참조하십시오. 그리고 많은 예제와 설명을 위해 스택 오버플로를 검색하십시오. 사양은 JSR 310입니다.

어디에서 java.time 클래스를 얻을 수 있습니까?

ThreeTen-Extra 프로젝트는 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 가능성을 입증합니다. 여기에 Interval, YearWeek, YearQuartermore과 같은 유용한 클래스가 있습니다.