比较日期的功能

时间:2010-03-17 22:45:56

标签: c date cstring

我的结构为:

struct stored
{
    char *dates; // 12/May/2010, 10/Jun/2010 etc..
};
// const
struct stored structs[] = {{"12/May/2010"}, {"12/May/2011"}, 
                           {"21/May/2009"}, {"13/May/2011"}, 
                           {"10/May/2011"}, {"19/May/2011"}};

我想要做的是用stored.dates对存储的结构进行排序。

qsort(structs, 9, sizeof(struct stored*), sortdates); // sortdates function

我不太确定那些日子的好方法是什么?将它们比作c字符串?

4 个答案:

答案 0 :(得分:1)

我会使用以下内容将日期转换为数字:

year * 10000 + month * 100 + day;

然后进行简单的数字比较(对于月份,你需要从Jan到1,从2月到2等地图。)

如果您正在进行大量比较,您可能希望在结构中缓存数字等效项。

答案 1 :(得分:1)

如果您将日期转换为YYYYMMDD格式(如20100314),则可以将它们作为字符串或整数(转换后)进行比较。

答案 2 :(得分:1)

ISO 8601格式的日期(“YYYYMMDD”或“YYYY-MM-DD”等)与C字符串相当。您的格式不是 - 会更改日期字符串的格式吗?

PS:如果你摆脱了“ - ”,你甚至可以将日期存储为普通的32位整数。根据您的应用程序对这些日期的处理,这可能是额外的奖励。

答案 3 :(得分:0)

您无法将这些作为字符串进行比较,但您可以比较子字符串。比较这些年份,如果它们不相等,你就得到了答案。接下来比较几个月,您需要某种表来按名称订购月份。最后,如果月份相同,则比较日期。