我想使用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);
答案 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;
}