找到最小时间和日期戳的有效方法是什么?

时间:2019-11-28 11:01:44

标签: c algorithm

我创建了一个带有不同时间戳和日期的表。时间和日期的结构如下:

typedef struct structTimeDate
{
    int seconds;
    int minutes;
    int hours;
    int day;
    int month;
    int year;
} TimeDate;

表的每一行都有一个TimeDate。我想要实现的是从表中找到最少的TimeDate,这意味着日期和时间最早的那个。我曾考虑过对表进行迭代并编写ifelse if来实现它,但是它看起来很复杂且容易出错。

是否存在任何有助于实现我的目标的算法?我不是要找人来给我写代码。我想要一个适合我需求的起点或任何算法。 预先感谢。

1 个答案:

答案 0 :(得分:2)

// at this level test is infered as with or without lineData const test= akpiDTOtoAkpiData({ id: 1, name: 'my name', startDate: '2019', periodData: [] as PeriodDto[], }); if ('lineData' in test) { // here test is precisely the type with lineData } 还不错。

if then else

替代方法:

如果只需要比较订单并且成员在主要范围内,则创建一个人造整数时间戳记。

if (x.year < y.year) return -1;
if (x.year > y.year) return 1;
if (x.month < y.month) return -1;
if (x.month > y.month) return 1;
...
if (x.sec < y.sec) return -1;
if (x.sec > y.sec) return 1;
return 0;

然后只需比较时间戳的整数值即可找到最大值。

需要额外的工作来支持负数年份。


使用2的幂次方常数会产生较小的效率。

// Think of date as base 13, 32, 24, 60, 60
long long ts = ((((x.year*13LL + x.month)*32 + x.day)*24 + x.hour)*60 + x.min)*60 + x.sec;