#include #include #define BASE_CENTURY 1900 #define BASE_YEAR 1970 #define DAYS_UPTO_1970 719469 #define SECONDS_PER_MINUTE 60 #define MINUTES_PER_HOUR 60 #define HOURS_PER_DAY 24 #define DAYS_PER_WEEK 7 #define DAYS_PER_YEAR 365 #define MIN_DAYS_PER_MONTH 28 #define AVG_DAYS_PER_MONTH 30 #define MAX_DAYS_PER_MONTH 31 #define MONTHS_PER_YEAR 12 #define ONE_SECOND 1 #define ONE_MINUTE (SECONDS_PER_MINUTE * ONE_SECOND) #define ONE_HOUR (MINUTES_PER_HOUR * ONE_MINUTE) #define ONE_DAY (HOURS_PER_DAY * ONE_HOUR) #define ONE_WEEK (DAYS_PER_WEEK * ONE_DAY) #define ONE_MONTH (AVG_DAYS_PER_MONTH * ONE_DAY) #define ONE_YEAR (DAYS_PER_YEAR * ONE_DAY) int main(int argc, char *argv[]) { int stopYear = 2019; time_t current = 0; struct tm *when; struct tm start; start.tm_sec = 0; start.tm_min = 0; start.tm_hour = 0; start.tm_mday = 1; start.tm_mon = 0; start.tm_year = 1970 - BASE_CENTURY; start.tm_wday = 0; start.tm_yday = 0; start.tm_isdst = 0; if (argc > 1) { stopYear = atoi(argv[1]); } current = mktime(&start); do { when = gmtime(¤t); printf("%4d %02d %02d = %d\n", when->tm_year + BASE_CENTURY, when->tm_mon + 1, when->tm_mday, when->tm_wday); current += ONE_DAY; } while (when->tm_year + BASE_CENTURY < stopYear); return 0; }