2011-05-05 63 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

對於這樣一個簡單的任務來說,這是完全矯枉過正的。 – 2011-05-05 08:44:19

+4

@彥子:如果你做了很多這麼簡單的任務,不是。 – 2011-05-05 08:49:30

+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))。 – 2014-09-19 09:01:43

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

你有沒有試過你的代碼? ;) – 2017-05-31 15:21:25

+0

猛擊,謝謝:)也修正了...... – 2017-05-31 15:50:54

+0

LocalDateTime是這個目的的錯誤類,因爲它故意沒有時區概念。 – 2017-10-27 08:11:34

0

在Java 7,你可以使用DateUtils類從Apache Commons庫:

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

Joda-Time庫:

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

如果使用Java 8,你不希望使用任何外部庫考慮新的Java構建8日期/時間API:

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

或者:

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

然而對於Java 8,您應該使用相當Instant,ZonedDateTime或LocalDateTime而不是Date。

顯然還有更多的方法可以做到這一點,但在我看來,它們在代碼清晰度方面相當乾淨和緊湊。

+0

LocalDateTime是這個目的的錯誤類,因爲它故意沒有時區的概念。 – 2017-10-27 08:11:58

+0

'日期'也沒有時區的概念。將它轉換爲'LocalDateTime'並且用'ZoneOffset.UTC(+0)'倒退不會改變時區,所以對我來說一切都很順利。你能舉出一個這種轉換會出現問題的例子嗎? – luke 2017-10-28 13:53:25

+0

不正確,'java.util.Date' * *具有時區的概念:UTC。 「日期」是從1970年的第一個時間開始計算的UTC(忽略閏秒)。所以**日期始終是UTC **,並表示時間線上的特定點。 「LocalDateTime」與任何區域或偏移量都沒有關聯,而*不代表時間軸上的某個時刻。因此,儘管日期時間的數字表示可能會解決,但解決方案的語義是錯誤的。 java.util.Date的java.time替換爲Instant,而不是LocalDateTime和ZonedDateTime。 – 2017-10-28 15:36:13

0

TL;博士

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

你不

Date類是應該不再使用的老麻煩日期類的一部分。它們被java.time類所取代。

Instant

使用添加到老班新方法,將您的Date一個Instant。兩者都代表UTC時間軸上的一段時間,但新類更精細的納秒級分辨率。

Instant instant = myDate.toInstant() ; 

增加五分鐘很容易。

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

或使用Duration

Duration d = Duration.ofMinutes(5) ; 
Instant later = instant.plus(d) ;