为了账号安全,请及时绑定邮箱和手机立即绑定

TimeDelta Java?

TimeDelta Java?

拉风的咖菲猫 2021-04-29 13:49:59
我正在尝试将代码从Python转换为Java。我需要timeDelta用Java重写该函数。这是Python中的代码:def timeDate(date):     return (timedelta(seconds=date * 3600 % 86400))有人对如何使功能相同的功能有任何想法吗?
查看完整描述

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小时的持续时间)。

DurationJava中的类具有持续时间,因此是您应该使用的类。它不接受用于创建的浮点数,因此我将您的小时数转换为十亿分之一秒,并四舍五入为整数。对于转换,我乘以从调用到的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


查看完整回答
反对 回复 2021-05-11
?
慕少森

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();


查看完整回答
反对 回复 2021-05-11
?
小唯快跑啊

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


查看完整回答
反对 回复 2021-05-11
  • 3 回答
  • 0 关注
  • 220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信