目前我有一個Date對象表示一個時間。我將如何添加5分鐘到這個對象?如何使用java.util.Date做日曆算術?
回答
你可以使用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);
考慮使用Joda-Time。這是一個圖書館,使日期和時間處理比內置的更令人愉快。
DateTime
類提供plusMinutes
方法。
DateTime now = DateTime.now(DateTimeZone.forID("America/Montreal"));
DateTime inFiveMinutes = now.plusMinutes(5);
日期的時間以毫秒爲單位。但是,對於此類計算,您可能會發現使用long
更簡單。
Date date1 = new Date();
long time1 = date1.getTime();
long time2 = time1 + 5 * 60 * 1000;
Date date2 = new Date(time2);
如果您使用純long
你可以放棄與Date對象的行。
隨着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);
你有沒有試過你的代碼? ;) – 2017-05-31 15:21:25
猛擊,謝謝:)也修正了...... – 2017-05-31 15:50:54
LocalDateTime是這個目的的錯誤類,因爲它故意沒有時區概念。 – 2017-10-27 08:11:34
在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。
顯然還有更多的方法可以做到這一點,但在我看來,它們在代碼清晰度方面相當乾淨和緊湊。
LocalDateTime是這個目的的錯誤類,因爲它故意沒有時區的概念。 – 2017-10-27 08:11:58
'日期'也沒有時區的概念。將它轉換爲'LocalDateTime'並且用'ZoneOffset.UTC(+0)'倒退不會改變時區,所以對我來說一切都很順利。你能舉出一個這種轉換會出現問題的例子嗎? – luke 2017-10-28 13:53:25
不正確,'java.util.Date' * *具有時區的概念:UTC。 「日期」是從1970年的第一個時間開始計算的UTC(忽略閏秒)。所以**日期始終是UTC **,並表示時間線上的特定點。 「LocalDateTime」與任何區域或偏移量都沒有關聯,而*不代表時間軸上的某個時刻。因此,儘管日期時間的數字表示可能會解決,但解決方案的語義是錯誤的。 java.util.Date的java.time替換爲Instant,而不是LocalDateTime和ZonedDateTime。 – 2017-10-28 15:36:13
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) ;
- 1. Java日曆算術問題
- 2. 日曆類算術異常
- 3. R中的日曆日期算術
- 4. 如何在java.util.Date中使用java 8中的Umalqura日曆
- 5. 如何做Gtk TextIter算術
- 6. 如何做對象算術
- 7. JPA Criteria API - 使用日曆值的算術
- 8. 將日曆轉換爲java.util.Date的問題
- 9. 使用java.util.Date獲取日期
- 10. 如何做日期時間算術在CQL
- 11. 做算術USING GROUPBY
- 12. 日期算術
- 13. 如何使用混合技術訪問本機日曆
- 14. 如何計算日曆日期?
- 15. NHibernate刪除日期算術使用HQL
- 16. 如何使用日曆
- 17. JPA日期算術?
- 18. 如何在sqlalchemy關係中使用日期(時間)算術?
- 19. 需要做日曆
- 20. javascript調度日曆的最佳做法或現有技術
- 21. 如何使用日曆創建日期
- 22. Java:如何使用日期/日曆
- 23. JavaScript是不是做算術運算
- 24. 分配值和做算術計算
- 25. 如何獲得java.util.Date這是今年比當前日期回不使用的SimpleDateFormat或日曆
- 26. 使用noleap日曆的Python Timedelta算法
- 27. Facebook用戶生日爲java.util.Date
- 28. 如何使用java.util.Date存儲出生日期?
- 29. 日期衝突(java.util.Date)
- 30. GWT日曆計算
對於這樣一個簡單的任務來說,這是完全矯枉過正的。 – 2011-05-05 08:44:19
@彥子:如果你做了很多這麼簡單的任務,不是。 – 2011-05-05 08:49:30
@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