【发布时间】:2021-08-04 13:11:22
【问题描述】:
How do I convert "2012-03-02" into unix epoch time in C? 中的第二个答案确实提供了解决方案。但它使用 tm_yday 而不是 tm 结构的 tm_mday 和 tm_mon。
我的输入是人类可读的日期和时间,所需的输出是 UNIX 纪元时间。
int main(int argc, char *argv[])
{
char timeString[80] = {"05 07 2021 00 33 51"}; //epoch is 1620347631000
struct tm my_tm = {0};
if(sscanf(timeString, "%d %d %d %d %d %d", &my_tm.tm_mon, &my_tm.tm_mday, &my_tm.tm_year, &my_tm.tm_hour, &my_tm.tm_min, &my_tm.tm_sec)!=6)
{
/* ... error parsing ... */
printf(" sscanf failed");
}
// In the below formula, I can't use my_tm.tm_yday as I don't have the value for it.
//I want to use my_tm.tm_mday and tm_mon.
printf("%d",my_tm.tm_sec + my_tm.tm_min*60 + my_tm.tm_hour*3600 + my_tm.tm_yday*86400 +
(my_tm.tm_year-70)*31536000 + ((my_tm.tm_year-69)/4)*86400 -
((my_tm.tm_year-1)/100)*86400 + ((my_tm.tm_year+299)/400)*86400 );
return EXIT_SUCCESS;
}
因此,换句话说,我正在寻找 my_tm.tm_yday*86400 的替代品 my_tm.tm_mday 和 my_tm.tm_mon
【问题讨论】:
-
请描述问题。您正在处理的输入数据是什么?期望的输出或状态是什么?你的代码在哪里?
-
感谢您的回复。我已经更新了问题
-
使用
mktime,如您链接到的问题的this answer。请注意,您应该将tm.tm_year设置为实际年份减去1900,并将tm.tm_mon设置为实际月份减去1。