Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 乔达时间都在几分钟内_Java_Jodatime - Fatal编程技术网

Java 乔达时间都在几分钟内

Java 乔达时间都在几分钟内,java,jodatime,Java,Jodatime,是否有一种以分钟(或任何其他形式)为单位获取句点的隐藏方式 现在我有: (period.getHours()*60 + period.getMinutes() + roundTwoDecimals((double)(period.getSeconds()/60))) double roundTwoDecimals(double d) { DecimalFormat twoDForm = new DecimalFormat("#.##"); return Double.va

是否有一种以分钟(或任何其他形式)为单位获取句点的隐藏方式

现在我有:

(period.getHours()*60 + period.getMinutes() + roundTwoDecimals((double)(period.getSeconds()/60)))
double roundTwoDecimals(double d) {
        DecimalFormat twoDForm = new DecimalFormat("#.##");
    return Double.valueOf(twoDForm.format(d));
}
但出于某种原因,我认为可能有更简单的方法


编辑:我的时间将是最长小时,永远不会是天。这是我第一次使用Joda time。

您可以尝试
(双)period.getMillis()/60000
并重新格式化。

由于
period
是由单个组件字段定义的(例如5年、7周),因此它们不能(轻松)直接转换为,分钟值,而不首先将其与特定时间点关联

例如,如果您有2个月的时间段,它包含多少分钟?为了知道这一点,你需要知道哪两个月。也许:

  • 六月和七月?(30+31=61天)
  • 七月和八月?(31+31=62天)
  • 闰年的二月和三月?(29+31=60天)
每一个都会有不同的分钟数

记住,有几种方法可以实现这一点。以下是几点:

  • 如果保证您的
    期间不包含月(或更高),您可以使用:

    但是,如果您在
    期间结束时有一个月值
    ,您将(根据javadoc)得到一个
    不支持操作异常

    java.lang.UnsupportedOperationException:无法转换为秒,因为此期间包含月份,且月份长度不同

  • 否则,您可以将
    时段
    与时间上的某个瞬间关联,并使用:

  • 请注意#2将根据代码运行的日期打印不同的值。但这只是它的本质


    作为另一种选择,您可以考虑从开始时使用<代码>持续时间< /代码> s,而不使用<代码>期限< />代码> .< /p>

    是的,您可以轻松地从JoDA时间对象获得分钟。


    这将只返回周期的毫秒分量,而忽略其他字段。为了澄清,执行
    新周期(1、6、2、2、5、4、3、100)。getMillis()
    将只返回
    100
    ,而不返回周期的完整长度(即求和字段).一段时间内的分钟数取决于它与特定时间点的关联。如果这段时间跨越闰年或闰秒呢?结果值会有所不同。你可以用a来代替吗?为了得到一些澄清,请看和。感谢这些链接,即使我这次没有使用持续时间,它们也提供了宝贵的知识。我的程序“持续时间”只有几分钟到几小时,阅读答案似乎我从一开始就应该使用持续时间。但考虑到这已经写好了,你认为方法#1只是一个简单的解决方案吗?最后一个问题是,如果我使用句点.toStandardminutes(),这不是更简单吗?不需要加上或乘以小时数。@Juan-#1可能是一个很好的解决方案,适合您的情况;为了避免意外的
    不支持操作异常
    ),如果他们碰巧潜入,在它周围添加一个检查数月可能不会有什么坏处。至于
    toStandardMinutes()
    :我使用秒是因为A)我不确定
    toStandardMinutes()
    是否会截断部分秒,以及B)是否需要这些部分秒。如果您对截断没意见,那么使用
    toStandardMinutes()
    可能没问题。@Juan-“尝试过……但没用”-怎么做?你能用你尝试过的代码更新你的问题吗?结果,以及为什么它不是预期的?好的,工作。之前的陈述似乎有点错误。使用:roundTwoDecimals((double)(period.toStandardSeconds().getSeconds())/60)我不得不保留roundTwoDecimals并将其转换为double,但更好的是,这个被接受的答案是不必要的复杂。查看该类,如中所示。一行简单的代码。
    Period period = new Period(60, 40, 20, 500);
    System.out.println(period.toStandardSeconds().getSeconds() / 60.0);
    
    // outputs 3640.3333333333335
    
    Period period = new Period(1, 6, 2, 2, 5, 4, 3, 100);
    
    // apply the period starting right now
    Duration duration = period.toDurationFrom(new DateTime());
    
    System.out.println(duration.toStandardSeconds().getSeconds() / 60.0);
    
    // outputs 810964.05 (when right now is "2012-01-09T13:36:43.880-06:00")
    
    int minutes = Minutes.standardMinutesIn( period ).getMinutes();