3 回答
TA贡献1797条经验 获得超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);
打印:
PT21H22M43.143853836S
这意味着:持续时间21小时22分43.143853836秒。
假设:我知道您想要一个持续时间(您链接的文档说“一个timedelta
对象代表一个持续时间”)。我已经将date
小时数作为浮点数了,您的取模运算使我相信您希望对1天取模的持续时间(因此26小时应取为2小时的持续时间)。
Duration
Java中的类具有持续时间,因此是您应该使用的类。它不接受用于创建的浮点数,因此我将您的小时数转换为十亿分之一秒,并四舍五入为整数。对于转换,我乘以从调用到的1小时内的纳秒数TimeUnit
(与乘除自己相比,这提供了更清晰,更容易出错的代码)。
上面的代码会在很长时间内默许给出错误的结果,因此您在使用前应检查范围。最多2 500 000小时(100 000天或将近300年),您应该是安全的。
请注意:如果date
不是一天中的某个时间,而不是一个持续时间,那就完全不一样了。在这种情况下,您应该LocalTime
在Java中使用。恰好是一天中的某个时间(没有日期和时区)。
nanos = nanos % TimeUnit.DAYS.toNanos(1);
LocalTime timeOfDay = LocalTime.ofNanoOfDay(nanos);
System.out.println(timeOfDay);
21:22:43.143853836
链接: 该类的文档Duration
TA贡献2019条经验 获得超9个赞
据我所知,Java没有内置的DeltaTime函数。但是,您可以轻松地自己制作。long startTime;
long delta;
public void deltaTime(){ long currentTime = System.currentTimeMillis(); delta = currentTime - startTime;}
每当您想启动DeltaTime计时器时,都只需执行time = System.currentTimeMillis;
。这样,变量“ delta”是启动DeltaTime计时器到使用结束它之间的时间量ClassNameHere.deltaTime();
。
TA贡献1863条经验 获得超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
添加回答
举报