某个月的最后一天

时间:2017-10-12 08:04:12

标签: c algorithm date

我遇到了一个无法找到解决方案的问题。或者至少是一个好的"一。 我希望在C中找到一个月和一年的最后一天。

例如:

last_day(10, 2017) > 31
last_day(02, 2017) > 28
last_day(02, 2016) > 29
last_day(01, 2017) > 31
last_day(12, 2010) > 31

last_day(X,Y)> X是月份,Y是年份

这是我的想法:获取Y年月X + 1的日期。从此日期开始删除1天。

我想知道是否有比这更好的解决方案,因为那将是一个制作"很多"操作简单"简单"的事情。

感谢。

修改:https://ideone.com/sIISO1

#include <stdio.h>
#include <time.h>
#include <string.h>

int main(void) {
    struct tm tm;
    char out[256];

    memset(&tm, 0, sizeof(struct tm));

    tm.tm_mon = 1;
    tm.tm_mday = 0;

    strftime(out, 256, "%d-%m-%Y", &tm);

    printf("%s", out);

    return 0;
}

我已经使用struct tm和day = 0进行测试,以便获得前一天但没有工作

1 个答案:

答案 0 :(得分:0)

在评论中指出,我已经将问题的方式复杂化了。

我对@Agnishom Chattopadhyay在评论中所说的内容有所启发,这是从查询表中获取日期。

但我确实做了一个功能

#include <stdio.h>

int days_in_month(int month, int year) {
    if ( year < 1582 ) return 0; /* Before this year the Gregorian Calendar was not define */  
    if ( month > 12 || month < 1 ) return 0;

    if (month == 4 || month == 6 || month == 9 || month == 11) return 30;
    else if (month == 2) return (((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) ? 29 : 28);
    return 31;
}

int main() {
    printf("%d\n", days_in_month(10, 2017));    
    printf("%d\n", days_in_month(2, 2000));
    printf("%d\n", days_in_month(2, 1300)); // Does not work !
    printf("%d\n", days_in_month(2, 2018));
    printf("%d\n", days_in_month(2, 2016));
}

https://ideone.com/5OZ3pZ