How to print a calendar for a specific month and year in C

1 Answer

0 votes
#include <stdio.h>
#include <time.h>

int days_in_month(int year, int month) {
    struct tm t = {0};

    t.tm_year = year - 1900;
    t.tm_mon  = month;   // go to next month
    t.tm_mday = 0;       // day 0 of next month = last day of current month

    mktime(&t);
    return t.tm_mday;
}

int weekday_of_first(int year, int month) {
    struct tm t = {0};

    t.tm_year = year - 1900;
    t.tm_mon  = month - 1;
    t.tm_mday = 1;

    mktime(&t);
    return t.tm_wday;    // 0 = Sunday
}

void print_month_calendar(int year, int month) {
    int first_wday = weekday_of_first(year, month);
    int dim = days_in_month(year, month);

    printf("     %d-%02d\n", year, month);
    printf("Su Mo Tu We Th Fr Sa\n");

    for (int i = 0; i < first_wday; i++)
        printf("   ");

    for (int day = 1; day <= dim; day++) {
        printf("%2d ", day);
        if ((first_wday + day) % 7 == 0)
            printf("\n");
    }
    printf("\n");
}

int main(void) {
    print_month_calendar(2026, 1);
    
    return 0;
}



/*
run:

     2026-01
Su Mo Tu We Th Fr Sa
             1  2  3 
 4  5  6  7  8  9 10 
11 12 13 14 15 16 17 
18 19 20 21 22 23 24 
25 26 27 28 29 30 31 

*/

 



answered Jan 18 by avibootz

Related questions

...