我在下面有字符串。
std::string _valid = "2014-03-28 16:45:59";
int y1, M1, d1, h1, m1, s1;
sscanf_s(_valid.c_str(), "%d-%d-%d %d:%d:%d", &y1, &M1, &d1, &h1, &m1, &s1);
现在,我可以获得年,月,日等等......
现在,我必须确定该时间是否早于当前的日期时间。
time_t now = time(NULL);
但是,time_t总是返回unix时间戳的时间。
如何比较日期?
答案 0 :(得分:2)
设置为struct tm,然后按函数time_t生成mktime。您可以直接比较两个time_t的值。
您还可以使用windows.h中的SYSTEMTIME和FILETIME。设置为SYSTEMTIME,然后按函数SystemTimeToFileTime生成FILETIME。比较函数CompareFileTime的两个FILETIME。 为了计算两个FILETIME之间的距离,我写了以下丑陋的代码:
__int64 duration = ((*(__int64 *)&ft2) - (*(__int64 *)&ft1));
请注意,SYSTEMTIME的分辨率高于struct tm。
答案 1 :(得分:1)
我认为你正在寻找mktime功能。细节在这里http://linux.die.net/man/3/mktime,但简而言之......
#include <time.h>
time_t mktime(struct tm *tm);
其中struct tm在time.h中定义为......
struct tm
{
int tm_sec; /* Seconds. [0-60] (1 leap second) */
int tm_min; /* Minutes. [0-59] */
int tm_hour; /* Hours. [0-23] */
int tm_mday; /* Day. [1-31] */
int tm_mon; /* Month. [0-11] */
int tm_year; /* Year - 1900. */
int tm_wday; /* Day of week. [0-6] */
int tm_yday; /* Days in year.[0-365] */
int tm_isdst; /* DST. [-1/0/1]*/
#ifdef __USE_BSD
long int tm_gmtoff; /* Seconds east of UTC. */
__const char *tm_zone; /* Timezone abbreviation. */
#else
long int __tm_gmtoff; /* Seconds east of UTC. */
__const char *__tm_zone; /* Timezone abbreviation. */
#endif
};
希望这有帮助。