Java 以十进制格式转换小时数
我试过多种方法来解决这个问题,但似乎都不明白 我有十进制的时间,单位是小时。我希望通过将其更改为DD:HH:MM:SS格式,使其更加清晰 例子: 10.89小时=10小时53分40秒 编辑:10.8949455==10小时53分40秒 我所尝试的: 返回:Java 以十进制格式转换小时数,java,Java,我试过多种方法来解决这个问题,但似乎都不明白 我有十进制的时间,单位是小时。我希望通过将其更改为DD:HH:MM:SS格式,使其更加清晰 例子: 10.89小时=10小时53分40秒 编辑:10.8949455==10小时53分40秒 我所尝试的: 返回:0(h)41(m)41(s) 有什么建议吗 (int)四舍五入。因此,(int)(finalBuildTime)为您提供小时 因为60乘以60等于3600,所以秒和分钟的计算是相同的 为了找出分和秒,我会观察到你的例子中的10.89小时是10小
0(h)41(m)41(s)
有什么建议吗
下面是一个完整的实现:
package test.std.java;
public class Test {
public static void main(String[] args) {
System.out.println(GetReadableTime(10.89));
}
//Prints outs HH:MM:SS
public static String GetReadableTime(double finalBuildTime){
int hours = (int) Math.floor(finalBuildTime);
int remainderInSeconds = (int)(3600.0* (finalBuildTime - Math.floor(finalBuildTime)) );
int seconds = remainderInSeconds % 60;
int minutes = remainderInSeconds / 60;
return String.format("%02d:%02d:%02d", hours, minutes, seconds);
}
}
第一部分是真的:
float finalBuildTime = 10.89;
int hours = (int) finalBuildTime; // 10 ok
但是(int)((10.89*(60*60))/60)=683这不是您想要的:它是finalBuildTime
在分钟内的直接转换
int minutes = (int) ((finalBuildTime - hours) * 60); // 53 ok
int seconds = (int) ((finalBuildTime - hours) * 3600 - minutes * 60 + 0.5); // 24 ok
我为秒计算添加了0.5,以四舍五入到最接近的秒,而不是截断。对于你的例子来说,这是没有用的,因为你的时间是一个整数秒数
秒数是
24秒=0.4分钟
其他答案都是正确的,但如果它能帮助你(或其他人)使用这样的库会容易得多。以下是使用Joda Time 2.3解决问题的方法:
double buildDurationInHours = 10.89;
long buildDurationInMilliseconds = new Double(DateTimeConstants.MILLIS_PER_HOUR * buildDurationInHours).longValue();
Period period = new Period(buildDurationInMilliseconds);
System.out.println("The build took "
+ period.getDays() + " days, "
+ period.getHours() + " hours, "
+ period.getMinutes() + " minutes, and "
+ period.getSeconds() + " seconds.");
输出:
The build took 0 days, 10 hours, 53 minutes, and 24 seconds.
通过这种方式,您不必直接计算小时、分钟、秒等。我假设finalBuildTime是双精度的。你只需要做:
int hours = (int)finalBuildTime;
int minutes = (int)((finalBuildTime - hours) * 60);
int seconds = (int)((((finalBuildTime - hours) * 60) - minutes ) * 60);
10(h) 53(m) 24(s)
我认为您预期的40秒输出是不正确的。应该是24秒
(53*60 + 24)/(60*60) = 0.89
虽然我喜欢使用Joda Time的建议,但为了让这个问题帮助用户,您需要帮助他将十进制数转换为毫秒。@JustinKSU True,我将在中编辑它。同样,Joda Time通过提供
DateTimeConstants.MILLIS\u PER\u HOUR
来帮助实现这一点。谢谢你的反馈。看起来不错。与其使用BigDecimal,为什么不使用Double类呢?新的双精度(DateTimeConstants.MILLIS_/u HOUR*buildDurationInHours).longValue();我相信(int)finalBuildTime相当于(int)Math.floor(finalBuildTime)。此外,在计算秒数时,你可以参考可变的小时数,而不是再次进行发言。当然,绝对同意。它只是让新手更容易理解。。。使截断部分更加明确。另一个很好的答案。还有助于您“拼写”计算。从小时到小数的反向转换过程是什么样的?谢谢您的回答!我交叉引用输出的“未仲裁”时间似乎被弄乱了,导致了24秒和40秒之间的差异。尽管如此,你的解决方案是正确的。实际上,我自己只是仔细检查了这些计算。实际的双精度是10.8949455,实际上应该是10h 53m 41s。如何应用逆向工程???例如:输入:2:30预期输出:2。5@zod如果你往上看,我从来没有说过。89是89分钟。逐字复制:“10.89小时==10小时53分40秒”这是另一个伟大的解决方案。注意:分钟计算结束时缺少分号。对不起,吹毛求疵。如果有人无意中发现这一点,请提前思考。
10(h) 53(m) 24(s)
(53*60 + 24)/(60*60) = 0.89