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

标签 java android date time calendar

我想获取日历对象实例的时间之间的差异。由于某种原因,我在使用此函数时得到一个负数(-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/

相关文章:

android - AdMob 响应消息为空或零长度

android - AppiumDriver<MobileElement> 和 AndroidDriver 之间的区别

android - 来自 firebase 中多个国家的查询列表

javascript - 在 JavaScript 中按天和特定时间进行调节,而不仅仅是天

java - 从 SpringMVC Liferay portlet 调用 jsp 的问题

java - 用户友好的应用程序实例之间的数据迁移

java - 将模拟的静态方法传递给另一个类

php - 为什么我的 MySQL Group By Hours vs Half Hours 文件不显示相同的数据?

php更改数据库日期值

java - java中使用dfs和bfs查找计算机上最大的文件