Java函数算法可延长时间

问题描述

我正在编写一个函数,该函数在时间字符串中增加分钟数-不使用任何时间库。该函数有两个参数-

  1. 一个是“时间”([H] H:MM AM | PM)字符串,格式为12:00 AM3:30 PM(12小时制,否(24小时制)军事时间输入
  2. 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),结果为:

  1. 02:00 AM == 120分钟
  2. 添加120分钟+(-180)分钟= -60分钟
  3. 将分钟(即60分钟)转换为小时= -1小时
  4. 使用Math.floorMod(-1,24) = 23来获得答案的“小时数”部分。仅使用%会给我1 ...的错误答案。
  5. 使用-60%60 = 0,以获得答案的 MINUTES 部分。常规%运算符在这里可以正常工作
  6. 连接小时+分钟+ AM / PM以返回类似11:00 PM的字符串

我一直在使用Math.floorMod(x,y),因为常规的模%运算符在为我求模时需要减去负数并最终取负数时对我不起作用。我现在尝试用9:13 AM(半天)和-720(整天)的分钟来尝试不同的输入,例如-1440,现在我得到了一些错误的答案。

当使用此模数算法将时间分钟一次时,我总是得到正确的答案。现在我本质上是减去分钟,并且可能以我以24为模的负数结尾,我是否必须做些不同的事情?

请让我知道。

解决方法

恐怕您可能还会得到负面的发言。您可以尝试添加-135分钟而不是-180分钟,然后看看会发生什么。

我认为您最好反转操作:

  1. 首先在会议记录中使用Math.floorMod(-60,24 * 60)以获得1380。
  2. 然后将1380分钟转换为23小时。

这应该确保分钟数也不能为负。

否则,我认为你很好。

PS在评论中重复我自己:对于生产代码,在一天中的某个时间使用java.time,the modern Java date and time API中的LocalTime,并使用其plusMinutesminusMinutes方法进行加法和减法分钟。这两种方法都接受正数和负数的分钟数。