-2

我的一天从 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 pause = 0 min OK

或者它可以是

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

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

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

4

2 回答 2

3

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

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

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

这是小学水平的数学。

于 2013-11-02T00:59:48.290 回答
1

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

一天从 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 的宽度。

于 2013-11-02T00:59:10.327 回答