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