我正在编写一个将分钟添加到时间字符串的函数 - 不使用任何时间库。该函数有两个参数 -
- 第一个,“时间”([H]H:MM AM|PM)字符串,格式类似于
12:00 AM
或3:30 PM
(12 小时制,无(24 小时制)军用时间输入) - 第二个,整数参数(正或负)为分钟,即
200
一切都很好,直到我遇到添加负分钟。例如,当第一个参数输入为02:00 AM
,第二个参数输入为时,我可以得到正确的答案-180
,这应该产生11:00 PM的答案。
我使用的算法是获取我的输入字符串“时间”/第一个参数,即02:00 AM
,并将其转换/映射为军事时间(24 小时制)以进行所有计算(因此我不必跟踪 AM 或PM),然后我将整个事情转换为minutes,然后我转换为hours并取 %(模)和 24(因为 1 天是 24 小时)得到HOURS部分答案,我使用之前计算的分钟和 %(模) 用 60 得到答案的MINUTES部分。
在此示例中,我在上面给出的 (02:00 AM) 和 (-180) 将导致:
- 02:00AM == 120 分钟
- 添加 120 分钟 + (-180) 分钟 = -60 分钟
- 将分钟(即 60)转换为小时 = -1 小时
- 使用
Math.floorMod(-1,24)
= 23,得到答案的小时部分。使用只是%
给了我错误的答案1
...... - 使用 -60 % 60 = 0,得到答案的MINUTES部分。常规 % 运算符在这里工作正常
- 连接小时 + 分钟 + AM/PM 以返回类似的字符串
11:00 PM
我一直在使用Math.floorMod(x,y)
,因为常规的模%
运算符对我不起作用,当减去并以负数结束时,我需要取模。我现在正在尝试不同的输入9:13 AM
,例如-720
(半天)和-1440
(全天)分钟,现在我得到了一些错误的答案。
似乎在使用此模数算法将分钟添加到时间时,我总是得到正确的答案。现在我是否必须做一些不同的事情,因为我实际上是在减去分钟并且可能以负数结束,我以 24 取模?
请告诉我。