UPDATE的Joda-Time項目,現在在maintenance mode,建議遷移到java.time類。請參閱Anees A的the Answer以使用ChronoUnit
和其他java.time類。
喬達時間
老java.util.Date/.Calendar類是出了名的麻煩,應該儘量避免。可以使用Joda-Time庫。除非你有Java 8技術,在這種情況下,使用它的後繼者,內置的java.time框架(截至2015年不在Android中)。
由於您只關心定義爲日期(而不是24小時)的「天數」,因此我們將重點放在日期上。 Joda-Time提供類別LocalDate
以表示沒有時間和時區的僅限日期的值。
雖然缺少時區,但請注意,時區爲至關重要確定諸如「今日」之類的日期。新的一天早在東部比在西部早。所以日期在世界各地不一樣,日期取決於你的時區。
DateTimeZone zone = DateTimeZone.forID ("America/Montreal");
LocalDate today = LocalDate.now (zone);
讓我們來計算直到下週的天數,當然應該是七天。
LocalDate weekLater = today.plusWeeks (1);
int elapsed = Days.daysBetween (today , weekLater).getDays();
在端的getDays
提取從由daysBetween
返回的Days
對象純int
數。
轉儲到控制檯。
System.out.println ("today: " + today + " to weekLater: " + weekLater + " is days: " + days);
今天:2015年12月22日至weekLater:2015年12月29日是天:7
你有日曆對象。我們需要將它們轉換爲Joda-Time對象。在日曆對象的內部,有一個long
整數跟蹤從UTC 1970年第一個時刻開始的毫秒數。我們可以提取該數字,並將其提供給Joda-Time。我們還需要指定我們打算確定日期所需的時區。
long startMillis = myStartCalendar.getTimeInMillis();
DateTime startDateTime = new DateTime(startMillis , zone);
long stopMillis = myStopCalendar.getTimeInMillis();
DateTime stopDateTime = new DateTime(stopMillis , zone);
將DateTime對象轉換爲LocalDate。
LocalDate start = startDateTime.toLocalDate();
LocalDate stop = stopDateTime.toLocalDate();
現在做相同的經過計算,我們以前看到。
int elapsed = Days.daysBetween (start , stop).getDays();
類似這樣的問題就是爲什麼他們寫道喬達時間。 Java日曆是如此絕望......你必須使用它嗎? – iluxa
因爲如果你必須的話,我會把它們都轉換成millis並且用這些工作,坦率地說:-) – iluxa