我正在嘗試將長時間轉換爲剩餘時間。我有一個長時間轉換爲剩餘時間
long remaining = XXXX
長是一個特定日期的毫秒。例如:3600000應導致INT周= 0,天= 0,小時= 1,分= 0,秒= 0 我怎樣才能轉換此長,使得我最終用5個整數:
int weeks;
int days;
int hours;
int minutes;
int seconds;
先謝謝你!
DirtyDev
我正在嘗試將長時間轉換爲剩餘時間。我有一個長時間轉換爲剩餘時間
long remaining = XXXX
長是一個特定日期的毫秒。例如:3600000應導致INT周= 0,天= 0,小時= 1,分= 0,秒= 0 我怎樣才能轉換此長,使得我最終用5個整數:
int weeks;
int days;
int hours;
int minutes;
int seconds;
先謝謝你!
DirtyDev
首先,我建議限定毫秒的數量在第二,分鐘,小時等爲常數
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);
這應該做你想做的。
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);
我發現代碼在另一個答案(Alexandru Severin)更具可讀性。 –
對不起,我不想批評太多了,還是我從其他的答案聚集,很容易要麼寫代碼是難以閱讀或拼寫錯誤代碼,給出了一個不正確的結果。 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
是指從幾小時到幾納秒的時間,所以我們仍然需要「手工」幾周。
新年快樂。
那長代表什麼?方法'getTime()'從一個日期的結果?秒/毫秒或其他單位? –
長爲特定日期的毫秒數。例如:3,600,000應該導致int周= 0,天= 0,小時= 1,分= 0,秒= 0 – dv02
編輯。沒有嘗試過任何東西,因爲到目前爲止,我沒有得到這種方法如何工作的邏輯。 – dv02