2014-10-30 169 views
2

我想學習剩餘時間到18.30在我的Android應用程序。但是,在喬達時間碼中有年,月和日。我想用沒有日期的剩餘時間使用喬達時間。剩餘時間與喬達時間

我的代碼不會刷新剩餘時間,重新開始時間在日期和時間過去時爲負值。所以,我想刪除日期值。

DateTime startDate = DateTime.now(); // now() : since Joda Time 2.0 
       DateTime endDate = new DateTime(2014, 10, 30, 18, 30); 

       Period period = new Period(startDate, endDate, PeriodType.dayTime()); 

       PeriodFormatter formatter = new PeriodFormatterBuilder() 
         .appendDays().appendSuffix(" day ", " days ") 
         .appendHours().appendSuffix(" hour ", " hours ") 
         .appendMinutes().appendSuffix(" minute ", " minutes ") 
         .appendSeconds().appendSuffix(" second ", " seconds ") 
         .toFormatter(); 
       tw.setText(formatter.print(period)); 

我在http://i.imgur.com/YEjIGFz.png

回答

1

解釋您的文字是不是很理解的,因爲一些英語的錯誤。所以這可能是沒有答案的主要原因。但是你的圖很清楚,並且已經顯示你的努力(所以我想知道爲什麼直到現在還沒有答案)。事實上,您正在搜索剩餘時間,直到下午18:30的當地時間

這裏,喬達的解決方案:

DateTime startDate = DateTime.now(); 
DateTime endDate = startDate.withTime(18, 30, 0, 0); // can move back in time! 

if (startDate.toLocalTime().isAfter(new LocalTime(18, 30))) { 
    endDate = endDate.plusDays(1); // compensation for having moved back 
} 

Period period = new Period(startDate, endDate, PeriodType.dayTime()); 

PeriodFormatter formatter = new PeriodFormatterBuilder() 
     .appendDays().appendSuffix(" day ", " days ") 
     .appendHours().appendSuffix(" hour ", " hours ") 
     .appendMinutes().appendSuffix(" minute ", " minutes ") 
     .appendSeconds().appendSuffix(" second ", " seconds ") 
     .toFormatter(); 
System.out.println(formatter.print(period)); 

// output at now about 18:28 => 1 minute 48 seconds 
// output at now about 18:31 => 23 hours 59 minutes 1 second 

正如你所看到的解決方案是有點尷尬。這種編碼一直是開發我自己的圖書館Time4J的原因之一。它提供了以下解決方案較短,沒有任何如果條件:

PlainTimestamp start = SystemClock.inLocalView().now(); 
    PlainTimestamp end = 
    start.with(PlainTime.COMPONENT.setToNext(PlainTime.of(18, 30))); 
    Duration<ClockUnit> duration = Duration.inClockUnits().between(start, end); 

    String p = PrettyTime.of(Locale.UK).print(duration, TextWidth.WIDE, true, 3); 
    System.out.println(p); // 23 hours, 40 minutes and 1 second 

我個人認爲喬達時間已經過時,因爲大多數人,而不是想使用內置的Java-8的新圖書館居住在包java.time(但是不能進行持續時間格式化)。 Joda-Time也沒有真正的未來發展(如果我們從幾年開始誠實的話)。 Joda-Time的項目負責人似乎希望根據他的博客文章在他的新的Threeten-Extra-library中進一步發展。