0

我的结构为:

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 对struct 'stored' 进行排序。

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

我不太确定那些日子有什么好方法?将它们作为 c 字符串进行比较?

4

4 回答 4

1

我会使用以下方法将日期转换为数字:

year * 10000 + month * 100 + day;

然后进行简单的数字比较(对于月份,您需要从一月到 1 日、二月到 2 日等进行映射)。

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

于 2010-03-17T22:51:46.913 回答
1

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

于 2010-03-17T22:54:47.763 回答
1

ISO 8601 格式的日期(“YYYYMMDD”或“YYYY-MM-DD”等)与 C 字符串非常相似。您的格式不是 - 可以选择更改日期字符串的格式吗?

PS:如果去掉“-”,您甚至可以将日期存储为纯 32 位整数。根据您的应用程序对这些日期的处理方式,这可能是额外的奖励。

于 2010-03-17T23:00:44.993 回答
0

您不能将它们作为字符串进行比较,但可以比较子字符串。比较年份,如果它们不相等,你就有答案了。接下来比较月份,您需要某种表格来按名称对月份进行排序。最后,如果月份相同,请比较日期。

于 2010-03-17T22:51:26.393 回答