问题描述
我正在编写一个函数,该函数在时间字符串中增加分钟数-不使用任何时间库。该函数有两个参数-
- 第一个是“时间”([H] H:MM AM | PM)字符串,格式为
12:00 AM
或3:30 PM
(12小时制,否(24小时制)军事时间输入) - second ,一个整数参数(正或负),为 minutes ,即
200
一切都很顺利,直到我发现增加了负分钟。例如,当第一个参数输入为02:00 AM
,第二个参数输入为-180
时,我可以得到正确的答案,这应该产生的答案下午11:00 。
我的算法我使用的是获取输入字符串“ time” /第一个参数,即02:00 AM
,并将其转换/映射为军事时间(24小时制) )(我不必跟踪上午或下午),然后将整个时间转换为分钟,然后将其转换为小时并用%(模)乘以24(因为1天为24小时)以获得 HOURS 部分答案,因此我使用先前计算的 minutes 和%(模) )与60来获得答案的 MINUTES 部分。
在此示例中,我给出的是(02:00 AM)和(-180),结果为:
- 02:00 AM == 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为模的负数结尾,我是否必须做些不同的事情?
请让我知道。
解决方法
恐怕您可能还会得到负面的发言。您可以尝试添加-135分钟而不是-180分钟,然后看看会发生什么。
我认为您最好反转操作:
- 首先在会议记录中使用
Math.floorMod(-60,24 * 60)
以获得1380。 - 然后将1380分钟转换为23小时。
这应该确保分钟数也不能为负。
否则,我认为你很好。
PS在评论中重复我自己:对于生产代码,在一天中的某个时间使用java.time,the modern Java date and time API中的LocalTime
,并使用其plusMinutes
和minusMinutes
方法进行加法和减法分钟。这两种方法都接受正数和负数的分钟数。