首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求更好的判断日期大小的算法(只限于标准C/C++标准库或win32 API)。该怎么处理

2012-02-14 
求更好的判断日期大小的算法(只限于标准C/C++标准库或win32 API)。。这是我目前用的算法:C/C++ code#include

求更好的判断日期大小的算法(只限于标准C/C++标准库或win32 API)。。
这是我目前用的算法:

C/C++ code
#include <time.h>// 比较两个日期的大小// 返回值:0(相等) 1(大于) -1(小于)int DateCompare(const tm& date1, const tm& date2){    int result = 0;    if (date1.tm_year < date2.tm_year)        result = -1;    else if (date1.tm_year > date2.tm_year)        result = 1;    else    {        if (date1.tm_mon < date2.tm_mon)            result = -1;        else if (date1.tm_mon > date2.tm_mon)            result = 1;        else        {            if (date1.tm_mday < date2.tm_mday)                result = -1;            else if (date1.tm_mday > date2.tm_mday)                result = 1;            else            {                if (date1.tm_hour < date2.tm_hour)                    result = -1;                else if (date1.tm_hour > date2.tm_hour)                    result = 1;                else                {                    if (date1.tm_min < date2.tm_min)                        result = -1;                    else if (date1.tm_min > date2.tm_min)                        result = 1;                    else                    {                        if (date1.tm_sec < date2.tm_sec)                            result = -1;                        else if (date1.tm_sec > date2.tm_sec)                            result = 1;                        else                        {                            result = 0;                        }                    }                }            }        }    }    return result;}


还有一个要求就是,必须能够支持[0,9999或更大]的任意年数。
有比我这更好的算法么????

[解决办法]
首先没有公元0年,如果有公元前的话,9999以上,你这个程序肯定就不行了。
所以最好的方法是将日期转换为一个整数,最好是经过秒数。
另外对于大范围日期,一定要考虑闰秒。比如今年6月最后一分钟就有闰秒。
此外夏时制,历法调整(比如考虑儒洛历被公历取代,为了避免麻烦可以用天文历)。
LZ不应该用tm来存储日期,32位C库自身的time只能在1900~2038之间正常工作。
虽然LZ可能没有mktime什么的,但是最好还是自定义结构。
说了这么多,就是说LZ想的太简单的,如果你不要求那么大的范围的话,问题会容易处理很多。
[解决办法]
LZ请考虑自己的实际需求,不要直接说9999或更大的任意年数,这是不切实际的。
要么你就一项一项的比较,简单用一个字符串,更不靠谱。
要么就转换为秒数,这是必须涉及很多问题。

热点排行