2011-05-05 4 views

답변

42

당신은 시간의 길이에 추가 할 쉽게 만들 것입니다 Calendar을 사용할 수 있습니다 : 당신은 그냥 같이 밀리 초 단위로 시간을 추가 할 수 있습니다 귀하의 경우를 들어

Calendar cal = Calendar.getInstance(); 
cal.setTime(date); 
cal.add(Calendar.MINUTE, 5); 
Date newDate = cal.getTime(); 

을 :

Date newDate = new Date(date.getTime() + 5 * 60 * 1000L); 
7

가 고려 Joda-Time을 사용하십시오. 내장 된 것보다 날짜와 시간을 훨씬 더 즐겁게 처리하는 라이브러리입니다.

DateTime 클래스는 plusMinutes 메소드를 제공합니다.

DateTime now = DateTime.now(DateTimeZone.forID("America/Montreal")); 
DateTime inFiveMinutes = now.plusMinutes(5); 
+3

그런 단순한 작업에는 완전히 과잉입니다. –

+4

@ 히코 : 당신이 그렇게 간단한 일을 많이하지 않는다면. –

+1

@HeikoRupp 분을 추가하여 날짜 - 시간 값을 조작하는 경우 다른 많은 날짜 - 시간 작업을 수행하고있을 가능성이 큽니다. 이러한 단순한 작업은 [Joda-Time] (http://www.joda.org/joda-time/)과 같은 적절한 데이트 타임 라이브러리가 없으면 신속하게 복잡하고 혼란스럽고 오류가 발생하기 쉽고 디버그하기가 어렵습니다. Java 8의 [java.time 패키지] (http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html) (Joda-Time에서 영감을 얻음, [JSR 310 ] (https://jcp.org/en/jsr/detail?id=310)). –

5

날짜의 시간은 밀리 초입니다. 그러나이 유형의 계산에는 long을 사용하는 것이 더 간단 할 수 있습니다.

Date date1 = new Date(); 
long time1 = date1.getTime(); 
long time2 = time1 + 5 * 60 * 1000; 
Date date2 = new Date(time2); 

일반 long을 사용하는 경우 Date 개체로 줄을 삭제할 수 있습니다.

2

Java 8에는 새로운 옵션이 있습니다. 실제로 Joda Time은 가능한 한 빨리 Java 8 Date and Time API로 이동할 것을 권장합니다. 다음은이 링크에서 시간을 추가하는 예는 다음과 같습니다

https://docs.oracle.com/javase/tutorial/datetime/iso/period.html

다음 코드는 현재 시간 5 분 추가 :

LocalDateTime now = LocalDateTime.now(); 
now = now.plusMinutes(5); 
System.out.println(now); 
+1

코드를 사용해 보셨습니까? ;) –

+0

Busted, thanks :) 또한 고정되어 있습니다 ... –

+0

'LocalDateTime'은 의도적으로 시간대의 개념이 없으므로이 목적을위한 잘못된 클래스입니다. –

0

자바 7에서 당신은 Apache Commons 라이브러리에서 DateUtils 클래스를 사용할 수 있습니다 :

Date dateWithFiveMinutesAdded = DateUtils.addMinutes(date, 5); 

또는 Joda-Time 라이브러리 :

,
Date dateWithFiveMinutesAdded = new DateTime(date).plusMinutes(5).toDate(); 

자바 8을 사용하고 외부 라이브러리가 8 날짜/시간 API 자바에 내장 된 새로운 고려해야 사용하지 않을 경우 :

Date dateWithFiveMinutesAdded = Date.from(date.toInstant().plus(5, ChronoUnit.MINUTES)); 

또는 대안 :

Date dateWithFiveMinutesAdded = Date.from(date.toInstant().plusSeconds(5 * 60)); 

단을 Java 8에서는 Date 대신 Instant, ZonedDateTime 또는 LocalDateTime을 사용해야합니다.

분명히 그것을 할 수있는 더 많은 방법이 있지만, 제 생각에는 그것들은 코드 명료성에 관해서는 꽤 깨끗하고 콤팩트합니다.

+0

'LocalDateTime'은 의도적으로 시간대의 개념이 없기 때문에이 목적을위한 잘못된 클래스입니다. –

+0

'날짜'에도 시간대 개념이 없습니다. 'LocalDateTime'으로 변환하고'ZoneOffset.UTC (+0)'로 역으로 변환해도 시간대가 바뀌지 않으므로 모든 것이 잘 보입니다. 이 전환으로 어떤 일이 잘못 될 수있는 상황을 예를 들어 줄 수 있습니까? – luke

+0

'java.util.Date' *가 * 잘못된 * 시간대 개념을 가지고 있습니다. : UTC. '날짜'는 1970 년 첫 번째 순간부터 UTC로 계산 한 것입니다 (윤초는 무시함). 따라서 ** Date는 항상 UTC **로되어 있으며 타임 라인의 특정 지점을 나타냅니다. 'LocalDateTime'은 어떤 존이나 오프셋과도 관련이 없으며, 타임 라인에서 한 순간을 나타내지 않습니다. 따라서 날짜 - 시간의 숫자 표현이 제대로 작동 할 수도 있지만 솔루션의 의미가 잘못되었습니다. java.util.Date에 대한 java.time의 대체는'LocalDateTime'이나'ZonedDateTime'이 아니라'Instant'입니다. –

0

TL; DR

myDate.toInstant() 
     .plus(5 , ChronoUnit.MINUTES) 

당신이 할

Date 클래스는 더 이상 사용할 수없는 귀찮은 된 날짜 클래스의 일부입니다. 이것들은 java.time 클래스에 의해 대체된다.

Instant

는 기존의 클래스에 추가 된 새로운 방법을 사용하여 DateInstant로 변환합니다. 둘 다 타임 라인에서 UTC의 순간을 나타내지 만 새로운 클래스는 나노초의 더 세밀한 분해능을 가지고 있습니다.

Instant instant = myDate.toInstant() ; 

5 분 추가가 쉽습니다.

Instant later = instant.plus(5 , ChronoUnit.MINUTES) ; 

또는 Duration을 사용하십시오.

Duration d = Duration.ofMinutes(5) ; 
Instant later = instant.plus(d) ; 
관련 문제