[英]How to calculate tm_yday given tm_mday and tm_mon?
How do I convert "2012-03-02" into unix epoch time in C? 中的第二個答案? 確實提供了解決方案。 但它使用 tm_yday 而不是 tm 結構的 tm_mday 和 tm_mon。
我的輸入是人類可讀的日期和時間,所需的 output 是 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方面的替代品
通過以下幫助程序 function,可以將“公歷采用日期”到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;
}
它使用以下幫助程序 function isyear
將“公歷采用日期”范圍內的一年轉換為INT_MAX
,如果年份不是閏年則返回 0,如果年份是閏年則返回 1:
int isleap(int year)
{
return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.