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

求更好的判断日期大小的算法(只限于标准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或更大的任意年数,这是不切实际的。
要么你就一项一项的比较,简单用一个字符串,更不靠谱。
要么就转换为秒数,这是必须涉及很多问题。