2015-11-05 77 views
0

在我的代碼的這一部分,我希望喬達時間計算並顯示下一個生日還剩下多少時間。因此,今年要改變的生日喬達時間如何計算剩下多少時間?

DateTime startDate = DateTime.now(); 
DateTime endDate = new DateTime(x,m110,d110,h120,min120); 
Period period = new Period(startDate, endDate, PeriodType.dayTime()); 
textView3.setText(formatter.print(period)); 
PeriodFormatter formatter = new PeriodFormatterBuilder() 
        .appendMonths().appendSuffix(".") 
        .appendDays().appendSuffix(" ") 
        .appendHours().appendSuffix(":") 
        .appendMinutes().appendSuffix(":") 
        .appendSeconds() 
        .toFormatter(); 

X這裏是一年,M110,D110,H120,min120 - 月,日,小時和分鐘。我應該寫什麼而不是「x」,所以它可以計算每年剩下多少時間,而不是一次。還有一個問題。例如,如果是3小時4分鐘,爲了顯示「03:04:00」而不是「3:4:」(它也只是不顯示0),我應該怎麼做?

回答

0

x的價值取決於生日是否已經在今年發生。您可以檢查在同一天和一個月使用這種方法DateTime.before在本年度:

DateTime startDate = DateTime.now(); 
int year = startDate.getYear(); 
DateTime endDate = new DateTime(year,m110,d110,h120,min120); 
if (endDate.isBefore(startDate)) // birthday happend already this year? 
    endDate = endDate.plusYears(1); // then the next one is in the next year 

至於你的第二個問題: 可以勸告builder創建一個格式化它使用printZeroAlways()始終打印零。爲了得到格式化打印至少兩個數字可以使用minimumPrintedDigits方法:

PeriodFormatter formatter = new PeriodFormatterBuilder()    
     .minimumPrintedDigits(0) 

     .appendMonths().appendSuffix(".") 
     .printZeroAlways() 
     .appendDays().appendSuffix(" ") 

     .minimumPrintedDigits(2) 

     .appendHours().appendSuffix(":") 
     .appendMinutes().appendSuffix(":") 
     .appendSeconds() 
     .toFormatter(); 

注意,這些方法僅適用於域方法的調用後添加。此外,該值可能會隨着建造者的創作而多次改變。