3 回答

TA貢獻1797條經(jīng)驗 獲得超6個贊
double hours = 21.37865107050986;
long nanos = Math.round(hours * TimeUnit.HOURS.toNanos(1));
Duration d = Duration.ofNanos(nanos);
// Delete any whole days
d = d.minusDays(d.toDays());
System.out.println(d);
打?。?/p>
PT21H22M43.143853836S
這意味著:持續(xù)時間21小時22分43.143853836秒。
假設:我知道您想要一個持續(xù)時間(您鏈接的文檔說“一個timedelta
對象代表一個持續(xù)時間”)。我已經(jīng)將date
小時數(shù)作為浮點數(shù)了,您的取模運算使我相信您希望對1天取模的持續(xù)時間(因此26小時應取為2小時的持續(xù)時間)。
Duration
Java中的類具有持續(xù)時間,因此是您應該使用的類。它不接受用于創(chuàng)建的浮點數(shù),因此我將您的小時數(shù)轉換為十億分之一秒,并四舍五入為整數(shù)。對于轉換,我乘以從調用到的1小時內的納秒數(shù)TimeUnit
(與乘除自己相比,這提供了更清晰,更容易出錯的代碼)。
上面的代碼會在很長時間內默許給出錯誤的結果,因此您在使用前應檢查范圍。最多2 500 000小時(100 000天或將近300年),您應該是安全的。
請注意:如果date
不是一天中的某個時間,而不是一個持續(xù)時間,那就完全不一樣了。在這種情況下,您應該LocalTime
在Java中使用。恰好是一天中的某個時間(沒有日期和時區(qū))。
nanos = nanos % TimeUnit.DAYS.toNanos(1);
LocalTime timeOfDay = LocalTime.ofNanoOfDay(nanos);
System.out.println(timeOfDay);
21:22:43.143853836
鏈接: 該類的文檔Duration

TA貢獻2019條經(jīng)驗 獲得超9個贊
據(jù)我所知,Java沒有內置的DeltaTime函數(shù)。但是,您可以輕松地自己制作。long startTime;
long delta;
public void deltaTime(){ long currentTime = System.currentTimeMillis(); delta = currentTime - startTime;}
每當您想啟動DeltaTime計時器時,都只需執(zhí)行time = System.currentTimeMillis;
。這樣,變量“ delta”是啟動DeltaTime計時器到使用結束它之間的時間量ClassNameHere.deltaTime();
。

TA貢獻1863條經(jīng)驗 獲得超2個贊
private static LocalTime timeDate(double d) {
//converts into a local time
return LocalTime.ofSecondOfDay((long)(d*3600%86400));
}
輸入(d):
36.243356711275794
輸出:
21:22:43
添加回答
舉報