我遇到了一个无法找到解决方案的问题。或者至少是一个好的"一。 我希望在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天。
我想知道是否有比这更好的解决方案,因为那将是一个制作"很多"操作简单"简单"的事情。
感谢。
#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进行测试,以便获得前一天但没有工作
答案 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));
}