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
发布于 2021-05-14 13:24:45
在“采用公历的日期”到INT_MAX的范围内的年份和范围为1至12的月份可以通过以下辅助函数转换为0到365范围内的基于零的“年份日”:
int yday(int year, int month)
{
static const short int upto[12] =
{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
int yd;
yd = upto[month - 1];
if (month > 2 && isleap(year))
yd++;
return yd;
}它使用以下帮助函数isyear,该函数将“采用公历的日期”范围内的一年用于INT_MAX,如果该年不是闰年,则返回0,如果该年是闰年,则返回0:
int isleap(int year)
{
return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
}https://stackoverflow.com/questions/67532995
复制相似问题