如何在c ++中比较字符串日期和time_t?

时间:2014-04-02 00:31:39

标签: c++ datetime

我在下面有字符串。

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时间戳的时间。

如何比较日期?

2 个答案:

答案 0 :(得分:2)

设置为struct tm,然后按函数time_t生成mktime。您可以直接比较两个time_t的值。

您还可以使用windows.h中的SYSTEMTIMEFILETIME。设置为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
};

希望这有帮助。