2016-12-30 138 views
1

我正在嘗試將長時間轉換爲剩餘時間。我有一個長時間轉換爲剩餘時間

long remaining = XXXX 

長是一個特定日期的毫秒。例如:3600000應導致INT周= 0,天= 0,小時= 1,分= 0,秒= 0 我怎樣才能轉換此長,使得我最終用5個整數:

int weeks; 
int days; 
int hours; 
int minutes; 
int seconds; 

先謝謝你!

DirtyDev

+0

那長代表什麼?方法'getTime()'從一個日期的結果?秒/毫秒或其他單位? –

+0

長爲特定日期的毫秒數。例如:3,600,000應該導致int周= 0,天= 0,小時= 1,分= 0,秒= 0 – dv02

+0

編輯。沒有嘗試過任何東西,因爲到目前爲止,我沒有得到這種方法如何工作的邏輯。 – dv02

回答

2

首先,我建議限定毫秒的數量在第二,分鐘,小時等爲常數

static final int SECOND = 1000;  // no. of ms in a second 
static final int MINUTE = SECOND * 60; // no. of ms in a minute 
static final int HOUR = MINUTE * 60; // no. of ms in an hour 
static final int DAY = HOUR * 24;  // no. of ms in a day 
static final int WEEK = DAY * 7;  // no. of ms in a week 

然後,可以使用基本分割(/)和模數(% )操作來找到你需要的東西。

long remaining = XXXX; 

int weeks = (int)(remaining/WEEK); 
int days = (int)((remaining % WEEK)/DAY); 
int hours = (int)((remaining % DAY)/HOUR); 
int minutes = (int)((remaining % HOUR)/MINUTE); 
int seconds = (int)((remaining % MINUTE)/SECOND); 
+1

這肯定會給他一個關於他功課的好消息,但我懷疑這對他真的會有幫助。 – AxelH

+0

此方法拋出ArithmeticException,因爲它有時會嘗試除以零。另一個答案效果更好 – dv02

+0

答案中有兩個拼寫錯誤:「剩餘%小時數」應該是「剩餘小時數」。 '剩下的%分鐘'應該是'剩餘%分鐘'。改正這些,並且它永遠不會拋出'ArithmeticException'。 @DirtyDev –

1

這應該做你想做的。

long inputTimeInMilliseconds = 93800000; 
    long milliseconds = inputTimeInMilliseconds % 1000; 
    long seconds = (inputTimeInMilliseconds/1000) % 60 ; 
    long minutes = ((inputTimeInMilliseconds/(1000*60)) % 60); 
    long hours = ((inputTimeInMilliseconds/(1000*60*60)) % 24); 
    long days = ((inputTimeInMilliseconds/(1000*60*60*24)) % 7); 
    long weeks = (inputTimeInMilliseconds/(1000*60*60*24*7)); 

    String remainingTime = "time:"+weeks+":"+days+":"+ hours+":"+minutes+":"+seconds+":"+milliseconds; 
    System.out.println(remainingTime); 
+1

我發現代碼在另一個答案(Alexandru Severin)更具可讀性。 –

2

對不起,我不想批評太多了,還是我從其他的答案聚集,很容易要麼寫代碼是難以閱讀或拼寫錯誤代碼,給出了一個不正確的結果。 DirtyDev,我知道,你可能不會被允許使用Duration,但對於其他人:

long remaining = 3_600_000; 

    Duration remainingTime = Duration.ofMillis(remaining); 
    long days = remainingTime.toDays(); 
    remainingTime = remainingTime.minusDays(days); 
    long weeks = days/7; 
    days %= 7; // or if you prefer, days = days % 7; 
    long hours = remainingTime.toHours(); 
    remainingTime = remainingTime.minusHours(hours); 
    long minutes = remainingTime.toMinutes(); 
    remainingTime = remainingTime.minusMinutes(minutes); 
    long seconds = remainingTime.getSeconds(); 

    System.out.println("" + weeks + " weeks " + days + " days " 
      + hours + " hours " + minutes + " minutes " + seconds + " seconds"); 

此打印:

0 weeks 0 days 1 hours 0 minutes 0 seconds 

它並不完美,但我相信,這既是可讀的,正確的,強大的。 Duration是指從幾小時到幾納秒的時間,所以我們仍然需要「手工」幾周。

新年快樂。