gpt4 book ai didi

C 从日期中获取一年中的第几天

转载 作者:太空狗 更新时间:2023-10-29 15:52:30 25 4
gpt4 key购买 nike

我想将 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

最佳答案

使用偏移很容易:

#include <stdio.h>

int yisleap(int year)
{
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

int get_yday(int mon, int day, int year)
{
static const int days[2][13] = {
{0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334},
{0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335}
};
int leap = yisleap(year);

return days[leap][mon] + day;
}

int main(void)
{
int day = get_yday(1, 31, 2013);

printf("%d\n", day);
return 0;
}

关于C 从日期中获取一年中的第几天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19377396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com