【问题标题】:TimeDelta java?时间增量java?
【发布时间】:2018-07-25 19:55:25
【问题描述】:

我正在尝试将代码从 Python 转换为 Java。我需要用 Java 重写 timedelta 函数。这是Python中的代码:

def timeDate(date):
    return (timedelta(seconds=date * 3600 % 86400))

有没有人知道如何制作一个功能相同的功能?

【问题讨论】:

  • 你能告诉我们timedelta是做什么的吗?
  • 好吧,我建议的第一件事是,不要使用数学运算来计算日期/时间值
  • 我很确定在java.time, the modern Java date and time API 你会找到你需要的构建块。例如Duration 类?
  • 我正在尝试做一个日出/日落计算器,当我做 timeDate(sunrise) 时,它输出:12:06:09.967646。当我将日出计算放入其中时,我正在尝试在 java 中创建一个类似的函数来做同样的事情

标签: java timedelta


【解决方案1】:
    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 秒。

假设:我知道您想要一个持续时间(您链接的文档说“A timedelta 对象代表一个持续时间”)。我已将date 设为浮点数小时数,您的模运算让我相信您希望持续时间以 1 天为模(因此 26 小时应该是 2 小时的持续时间)。

Java 中的Duration 类用于持续时间,因此您应该使用它。它不接受用于创建的浮点数,因此我将您的小时数转换为纳秒并四舍五入为整数。对于转换,我乘以 1 小时内的纳秒数,这是我从对 TimeUnit 的调用中得到的(这提供了比我们自己乘以更清晰且不易出错的代码)。

上面的代码会默认给出大量小时数的错误结果,因此您应该在使用之前检查范围。长达 250 万小时(10 万天或近 300 年)你应该是安全的。

请注意:如果 date 是一天中的某个时间而不是一个持续时间,那么情况就完全不同了。在这种情况下,您应该在 Java 中使用 LocalTime。它恰好是一天中的某个时间(没有日期和时区)。

    nanos = nanos % TimeUnit.DAYS.toNanos(1);
    LocalTime timeOfDay = LocalTime.ofNanoOfDay(nanos);
    System.out.println(timeOfDay);

21:22:43.143853836

链接: Documentation of the Duration class

【讨论】:

    【解决方案2】:

    据我所知,Java 没有内置的 DeltaTime 函数。但是您可以轻松地制作自己的。long startTime; long delta;public void deltaTime(){ long currentTime = System.currentTimeMillis(); delta = currentTime - startTime;}

    只要您想启动您的 DeltaTime 计时器,您只需执行time = System.currentTimeMillis;。这样,变量“delta”就是您启动 DeltaTime 计时器和使用 ClassNameHere.deltaTime(); 结束它之间的时间量。

    【讨论】:

    【解决方案3】:
    private static LocalTime timeDate(double d) {
        //converts into a local time 
        return LocalTime.ofSecondOfDay((long)(d*3600%86400));   
    }
    

    输入(d):

    36.243356711275794
    

    输出:

    21:22:43
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      相关资源
      最近更新 更多