【发布时间】:2021-05-22 03:37:33
【问题描述】:
我想将 01/31/2013 这样的日期转换为一年中的某一天(在本例中为 31)。 这个日期来自用户输入,所以我还需要检查它是否是一个有效的日期。 我知道我可以自己计算一年中的哪一天,如下所示:
int get_yday(int mon, int day, int year)
{
int yday=0;
mon--;
switch (mon){
case 12:
yday+=31;
case 11:
yday+=30;
....
case 2:
if (is_leap_year(year)) yday+=29;
else yday+=28;
.....
但是,这意味着我需要自己检查用户输入,例如
switch(month){
case 1:
if (day > 31 || day < 0) {...}
case 2:
if (...check leap year and day ...) {...}
C 中是否有内置 API 可以轻松获取一年中的日期?
我有一个解决方案,但我想知道是否有更好的解决方案:
1. creating a tm struct of 01/31/2013 00:00:00
2. get timestamp by mktime()
3. convert timestamp to struct tm by localtime()
4. get tm_yday from tm struct
【问题讨论】:
-
“下面的解决方案”正是我会做的,我认为没有更好的标准C api。