Java函数算法,增加分钟到时间

Java函数算法,增加分钟到时间,java,algorithm,time,modulo,timeofday,Java,Algorithm,Time,Modulo,Timeofday,我正在编写一个函数,将分钟添加到时间字符串中,而不使用任何库来表示时间。该函数有两个参数- 第一个是“time”([H]H:MM AM | PM)字符串,格式类似于12:00 AM或3:30 PM(12小时时钟,无(24小时锁定)军事时间输入) 第二个是整数参数(正或负),如分钟,即200 一切都很好,很漂亮,直到我发现增加了消极的分钟数。例如,当第一个参数输入为02:00am,第二个参数输入为-180时,我可以得到正确的答案,这将产生答案晚上11:00pm 我使用的算法是将我的输入字符串“ti

我正在编写一个函数,将分钟添加到时间字符串中,而不使用任何库来表示时间。该函数有两个参数-

  • 第一个是“time”([H]H:MM AM | PM)字符串,格式类似于
    12:00 AM
    3:30 PM
    (12小时时钟,无(24小时锁定)军事时间输入)
  • 第二个是整数参数(正或负),如分钟,即
    200
  • 一切都很好,很漂亮,直到我发现增加了消极的分钟数。例如,当第一个参数输入为
    02:00am
    ,第二个参数输入为
    -180
    时,我可以得到正确的答案,这将产生答案晚上11:00pm

    我使用的算法是将我的输入字符串“time”/第一个参数,即
    02:00am
    ,转换/映射为军事时间(24小时时钟),用于所有计算(因此我不必跟踪AM或PM),然后将整个内容转换为分钟,然后我转换为hours,并用24(因为一天是24小时)的%(模)得到hours部分答案,我使用之前计算的minutes和60的%(模)得到答案的minutes部分

    在我上面给出的示例中(凌晨02:00)和(-180),将导致:

  • 凌晨02:00==120分钟
  • 加上120分钟+(-180)分钟=-60分钟
  • 将分钟(即60分钟)转换为小时=-1小时
  • 使用
    Math.floorMod(-1,24)
    =23获得答案的小时数部分。仅使用
    %
    就给出了
    1
    的错误答案
  • 使用-60%60=0获得答案的分钟部分。常规%运算符在这里工作正常
  • 连接小时+分钟+上午/下午以返回类似
    11:00pm
  • 我一直在使用
    Math.floorMod(x,y)
    ,因为常规的模
    %
    运算符对我不起作用,当我减去并得到需要取模的负数时。我现在尝试了不同的输入,比如上午9:13,半天时间是720分钟,全天时间是1440分钟,现在我得到了一些错误的答案

    似乎当使用此模数算法将分钟添加到一个时间时,我总能得到正确的答案。我必须做一些不同的事情吗,现在我基本上是在减去分钟,最后可能是负数,取模24


    请让我知道。

    恐怕您仍然会得到负分。您可以尝试添加例如-135分钟而不是-180分钟,然后看看会发生什么

    我认为你最好还是撤销这些行动:

  • 首先在分钟数上使用
    Math.floorMod(-60,24*60)
    获得1380
  • 然后将1380分钟转换为23小时
  • 这应该确保分钟数也不能为负

    否则我认为你很好


    PS重复我的评论:对于生产代码,在一天中的某个时间使用
    LocalTime
    from,并使用其
    plusMinutes
    minutes
    方法添加和减去分钟。这两种方法都接受正的和负的分钟数。

    为什么不使用任何库?如果是为了练习,这是一个很好的练习,但是对于生产代码,应该使用。你为什么把一天中的时间排成一行?对我来说,涉及数字的表示似乎更自然、更实用。比如从00:00开始的分钟数,从0到1439,只是举一个可以思考的例子。如果我们能够看到,甚至可以尝试运行您的代码,就更容易给出准确的答案。@OleV.V。我可以发布代码,但它有很多通用的/明显的东西,比如当我映射到24小时制(军事时间),它只是一个巨大的开关语句,它有很多代码/丑陋的,会很快填满页面。我认为伪代码可以,因为问题其实很简单,不管我写了多少。我看到你在下面贴了一个解决方案,我会在早餐后在这里验证:D谢谢