2012-02-09 102 views
5

約達時間分鐘,我有這個簡單的代碼:的持續時間或間隔

DateTime date = new DateTime(dateValue); 
DateTime currentDate = new DateTime(System.currentTimeMillis()); 

System.out.println("date: " + date.toString()); 
System.out.println("currentDate: " + currentDate.toString()); 

Period period = new Period(currentDate, date); 
System.out.println("PERIOD MINUTES: " + period.getMinutes()); 
System.out.println("PERIOD DAYS: " + period.getDays()); 

Duration duration = new Duration(currentDate, date); 
System.out.println("DURATION MINUTES: " + duration.getStandardMinutes()); 
System.out.println("DURATION DAYS: " + duration.getStandardDays()); 

我想簡單地找出天的兩個隨機日期之間的數量和分鐘。

這是這段代碼的輸出:

date: 2012-02-09T00:00:00.000+02:00 
currentDate: 2012-02-09T18:15:40.739+02:00 
PERIOD MINUTES: -15 
PERIOD DAYS: 0 
DURATION MINUTES: -1095 
DURATION DAYS: 0 

我猜,我做錯了什麼,我看不出有什麼。

回答

13

的問題是,你沒有在指定期限的類型期間構造函數 - 因此它使用「年,月,周,天,小時,分鐘,秒和毫秒」的默認值。你只看到15分鐘,因爲你不需要幾個小時,這將返回-18。

如果你只是想天和分鐘,你應該指定:

PeriodType type = PeriodType.forFields(new DurationFieldType[] { 
              DurationFieldType.days(), 
              DurationFieldType.minutes() 
             }); 

Period period = new Period(currentDate, date, type); 
// Now you'll just have minutes and days 

瞭解,這是「有一定的毫秒數,可以根據不同的單位中獲取一個Duration之間的區別是很重要的「和Period,它實際上是一組字段類型(分鐘,月,日等)到值的映射。一段時間內沒有單一時間值 - 這是一組值。

+0

哦,我從來沒有完全明白這一點。我開悟了。 – 2012-02-09 22:46:27

+2

@LouisWasserman:我在將Joda Time移植到.NET時有點特殊,所以我可能比大多數人對它有更好的理解:) – 2012-02-09 22:49:24

3

它看起來是工作得很好,所有你需要做的就是正面的價值觀是交換周圍datecurrentDate

Period period = new Period(date, currentDate); 
+0

我認爲OP關注的是「分鐘」中的一個視圖給出15,而另一個視圖給出1095 ... – 2012-02-09 16:25:22

+0

好點,我現在明白了。 – jbranchaud 2012-02-09 16:28:57