【问题标题】:I am losing one minute every day and my day is 23:59 and not 24我每天损失一分钟,我的一天是 23:59 而不是 24
【发布时间】:2023-03-13 06:37:01
【问题描述】:

我的一天从 2013 年 11 月 2 日 00:00 开始,到 23:59 结束,因为新的一天是 2013 年 11 月 3 日 00:00 - 我得到的数学是 23:59 - 00:00 23:59 ,这意味着我每天损失 1 分钟。 我是否需要每次添加 +1 分钟才能获得 24:00 作为结果。 如果是这样,我该如何处理这个问题:23:59 开始和 23:59 结束,因为新的一天?

有时在 1 分钟内点击几次是给我的

Opt1 clock start 12:30 end 12:30 = 0 min
Opt2 clock start 12:30 end 12:30 = 0 min
Opt1 clock start 12:30 end 12:30 = 0 min
Opt2 clock start 12:30 end 12:31 = 1 min

这么久没关系,但我不知道“时钟开始 23:59 结束 23:59”是实际完成的工作还是错误。 如果是失误,0分钟就好,如果不是失误,我就输1分钟。

我在做一个小计时器,但我找不到那个问题的解决方案。

也许我需要用户的额外确认?

但是当它到达 23:59:59 时它会自动切换到新的一天,所以我将 23:59 作为前一天的最后一点,新的一天从 00:00 开始。

如何获得正确的时间? 晚上 11:59 和上午 12:00 也是如此 - 又是一天在晚上 11:59 结束,因为新的一天从上午 12:00 开始,对吧?

那么如何补偿那 1 分钟呢?

更新:

时间格式是 SimpleDateFormat foutputFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");

解析到日期,然后做简单的数学运算

 mint+= (finishd[i].getTime()/60000) - (startd[i].getTime() / 60000);

 ////System.out.println(mint);
 int h=(int)mint/60;
 int m=(int)mint-(h*60);
 ////System.out.println("Min: " +mint);
 String totaltime = h + "h"+":" + m+"min";
 ////System.out.println("H: " + h + "Min: " + m);

问题是当我有:开始 01/03/2004 00:00 和结束 01/03/2004 23:59 。第二天从 02/03/2004 00:00 开始。 我的工作时间是 23 小时:59 分钟,而不是 24 小时——一整天我都使用 SQL 数据库来保存和读取数据。数据格式“dd/MM/yyyy HH:mm”;

差不多了 :D 对我来说最后一个问题是我需要做这样的数学运算:

pause 10:20 - 10:40 = 20 min OK
working 10:40 - 12:42 = 2h:2min OK
pause 12:42 - 12:57 = 15 min OK
working 12:57 - 12:57 = 0 OK
pause 12:57 - 12:57 = 0 OK
working 12:57 - 16:00 = 3h:3min OK
Total work 5h:5min / pause 35min OK

23:59终于来了:

 working 22:00 - 23:59 = 1h:59m missing 24! 1min lost

 NEW DAY working 00:00 - 04:30 = 4h:30min OK

那么如何按原样修复最后的 23:59 23:59 - 23:59 暂停 = 0 分钟确定

也可以

  day1 23:59 - day2 00:20  = 21min ? 

但 SQL 只能将信息存储为 00-59min 00-23h

然后,如果我需要那天的总工作和总停顿: 我可以总结当天的所有记录,当我暂停 + 工作时,我将得到 23:59 小时的总数

【问题讨论】:

  • 虽然这被标记为 Java,但语法确实不是。我们在这里看到了什么?
  • 放下杯子去睡觉吧。明天——当你再次阅读这篇文章时——你的问题就会得到解决——看起来很神奇。
  • 如果你在浪费时间,你可能会遇到哭泣天使的问题。只是不要眨眼!
  • 反对什么???我认为你们喝醉了,而不是我。
  • @JohnBG - 不要抱怨。 “醉”是慈善的解释:-)

标签: java date calendar


【解决方案1】:

考虑这个问题的方式有问题。

每天有 60 * 24 分钟 = 1440。第一个是 00:00。最后一个是 23:59。

minutes(23:59) - minutes(00:00) 不是 1440 的原因是这不是计算一天分钟数的正确方法!正确方法minutes(day 2 00:00) - minutes(day 1 00:00)

这是小学水平的数学。

【讨论】:

  • 他会以 23:59 分钟为增量向您收费,因为他在这个问题上的工作。您不必付费,只需返回“除以零”错误即可 :)跨度>
【解决方案2】:

这部分是关于“包容性/排他性”或封闭/开放边界,部分是关于减法。

一天从 0000 时开始。同一天在 2400 小时结束 - 这是您可以衡量的端点,而不是您可以开始的时间。

因此,一天是正确的 24 小时。

您可以将端点“近似”为 23:55、23:59、23:59、23:59:59、23:59:59.999 或您想要的接近程度近似但不正确 接近它。但实际正确的终点始终是 2400 小时,也就是第二天的 0000 小时。

不要将“一天结束”时间存储为 23:59,错误地使用不准确的近似值而不是让基本面正确只会导致更多问题。

在计算“工作持续时间”次数时,一个简单的规则:

  1. 将开始时间向下舍入到最近的前一分钟。
  2. 将结束时间四舍五入到下一分钟。

这将确保记录的工作持续时间始终 >= 1 分钟,除非开始和结束时间几乎完全相同。确保您的代码无论如何都可以在 0 时长下工作——它可以在 0 时充电,这很好,它不应该崩溃。

在循环和图形中也会出现同样的问题——一个好的循环它的下限(包括)开始,但在以下它的上限(不包括)终止。这给出了 hi-lo=count 的属性。

像素也是如此——我们可以最好地将每个小像素可视化为网格线之间的彩色正方形。我们测量网格线,并在它们之间填充像素。因此,从网格线 0 到网格线 1 的矩形只填充了这些边界之间的一个像素,并且正确地给出了 1 的宽度。

【讨论】:

    猜你喜欢
    • 2021-10-31
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2017-06-19
    • 2021-06-11
    • 2021-09-04
    相关资源
    最近更新 更多