gpt4 book ai didi

java - 从转换毫秒显示小时数显示不正确

转载 作者:行者123 更新时间:2023-12-01 21:24:41 26 4
gpt4 key购买 nike

我想获取日历对象实例的时间之间的差异。由于某种原因,我在使用此函数时得到一个负数(-17666324.42)。

对于 overtimeHourLimit,我使用值 8。

/*Date*/
Calendar mDateIn = Calendar.getInstance();
Calendar mDateOut = Calendar.getInstance();
mDateOut.set(mDateOut.YEAR, mDateOut.MONTH, mDateOut.DAY_OF_MONTH, mDateOut.HOUR_OF_DAY+10, mDateOut.MINUTE+25);

public String getRegHours(float overtimeHourLimit)
{
DecimalFormat twoDecimal = new DecimalFormat("0.##");
double totalHours = 0;
totalHours = (mDateOut.getTimeInMillis() - mDateIn.getTimeInMillis()) / (3.6f * Math.pow(10, 6));
if (totalHours <= overtimeHourLimit)
return twoDecimal.format(totalHours);
else return twoDecimal.format(overtimeHourLimit);
}

编辑:将范围缩小到 mDateOut.set() 方法。 @HarshPandey 发现当使用 mDateOut.add() 方法时,它会正确地添加时间。然而,我仍然困惑为什么 .set() 方法一开始不起作用。

编辑2:https://github.com/MienTommy/CalendarTest我推出了一个示例代码,它应该与这个问题中的代码 fragment 等效。唯一的区别是 YEAR、MONTH、DAY_OF_MONTH 常量在 Android 中不是静态的,但应该不会有什么区别,因为我使用相同的实例初始化了它们。

tl;dr .set() 方法未按预期工作。

最佳答案

问题的原因在这里:

mDateOut.set(mDateOut.YEAR, mDateOut.MONTH, mDateOut.DAY_OF_MONTH, mDateOut.HOUR_OF_DAY + 10,
mDateOut.MINUTE + 25);

为了解释:

getTimeInMillis() 正在获取纪元:自 1970 年 1 月 1 日 00:00:00 以来的时间

这个方法:

mDateOut.set ()...

设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。在日历实例中......

但是您将 Calendar 类的常量作为参数传递,因此您将日期设置为 1970 年 1 月 1 日 00:00:00 之前的值

考虑这样做:

mDateOut.set(mDateOut.YEAR, mDateOut.MONTH, mDateOut.DAY_OF_MONTH, mDateOut.HOUR_OF_DAY + 10,
mDateOut.MINUTE + 25);

与这样做是一样的......

mDateOut.set(1, 2, 5, 21, 37);

您可以通过执行以下操作来验证该新值:

System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(mDateOut.getTime()));

你将得到输出:

0001-03-05 21:37:40

因此mDateOut实际上是一个过去的日期...

结果是否定的:)

关于java - 从转换毫秒显示小时数显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38386972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com