将时间戳转换为MYSQL_TIME

时间:2018-08-22 18:51:41

标签: mysql c

我想使用C库将unix时间戳插入MySQL。

根据MySQL doc,我应该使用MYSQL_TIME结构,如下所示:

MYSQL_TIME  ts;

ts.year= 2002;
ts.month= 02;
ts.day= 03;

ts.hour= 10;
ts.minute= 45;
ts.second= 20;

将持有时间戳的整数值转换为该结构的正确方法是什么?

除了数字的纯解析之外,还有其他解决方案吗?

这是我的目标:

std::time_t t = 1534963754;
MYSQL_TIME mysql_time = convert_to_MYSQL_TIME(t);

1 个答案:

答案 0 :(得分:0)

我的方法是使用localtime(),它以秒为单位获取计时器值并填充tm结构。使用tm结构填充MYSQL_TIME结构。

tm结构的定义是

struct tm {
   int tm_sec;         /* seconds,  range 0 to 59          */
   int tm_min;         /* minutes, range 0 to 59           */
   int tm_hour;        /* hours, range 0 to 23             */
   int tm_mday;        /* day of the month, range 1 to 31  */
   int tm_mon;         /* month, range 0 to 11             */
   int tm_year;        /* The number of years since 1900   */
   int tm_wday;        /* day of the week, range 0 to 6    */
   int tm_yday;        /* day in the year, range 0 to 365  */
   int tm_isdst;       /* daylight saving time             */   
};

您的convert_to_MYSQL_TIME函数如下所示。

 MYSQL_TIME  convert_to_MYSQL_TIME(time_t t)
    {
       struct tm * timeinfo;
       MYSQL_TIME sqlTime;

       timeinfo = localtime (&t);
       sqlTime.year = timeinfo.tm_year;
       sqlTime.month = timeinfo.tm_mon;
       sqlTime.day = timeinfo.tm_mday;
       sqlTime.hour = timeinfo.tm_hour;
       sqlTime.minute = timeinfo.tm_min;
       sqlTime.second = timeinfo.tm_sec;

      return sqlTime;
    }