算法需要计算两次之间的差异

Ris*_*shi 1 algorithm time datetime

我有一个小时选择下拉0-23和分钟选择下拉0-59Start timeEnd time(所以四个控件).

我正在寻找一种使用这四个值来计算时差的算法.

由于它们没有存储在花哨的日期/时间选择控件中,我认为我不能使用任何标准的日期/时间操作功能.

我如何计算两次之间的差异?

pax*_*blo 13

这个伪代码为您提供算法,以分钟计算出差异.

它假设,如果开始时间在结束时间之后,则开始时间实际上是前一天.

startx = starthour * 60 + startminute
endx = endhour * 60 + endminute
duration = endx - startx
if duration < 0:
    duration = duration + 1440
Run Code Online (Sandbox Code Playgroud)

startxendx值是自午夜的分钟数.

这基本上是这样做的:

  • 获取开始时间的开始时间的分钟数.
  • 获取从结束时间开始的分钟数.
  • 从后者中减去前者.
  • 如果结果为负数,则添加一天中的分钟数.

尽管你不能使用日期/时间操作功能,但不要太确定.您可能会发现您可以轻松地构建日期/时间并使用以下内容计算差异:

DateTime startx = new DateTime (1, 1, 2010, starthour, startminute, 0);
DateTime endx   = new DateTime (1, 1, 2010, endhour  , endminute  , 0);
Integer duration = DateTime.DiffSecs(endx, startx) / 60;
if (duration < 0)
    duration = duration + 1440;
Run Code Online (Sandbox Code Playgroud)

虽然你的简单场景可能不需要它.除非你发现自己做了一些棘手的日期/时间操作,否则我会坚持使用上面给出的伪代码.


如果您想将持续时间(以分钟为单位)转换为小时和分钟:

durHours = int(duration / 60)
durMinutes = duration % 60 // could also use duration - (durHours * 60)
Run Code Online (Sandbox Code Playgroud)

  • 是的,在sexagesimal系统中的一些数学能力:-)从5:50到8:30在两小时和_forty_分钟.两个小时从5:50到7:50,10分钟到8:00再到30分钟到8:30.十点三十分钟,而不是五十分钟.我不确定这种坚持的来源是2:50持续时间.有没有_we're_缺失? (3认同)