#include <iostream>
#include <chrono>
#include <iomanip>
#include <vector>
// C++ 20
using namespace std::chrono; // year // year_month_day // weekday // last
void printYearCalendar(int yr) {
const std::vector<std::string> months = {"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
year y{yr};
for (unsigned m = 1; m <= 12; m++) {
std::cout << "\n ------------ " << months[m-1] << " " << yr << " ------------\n";
std::cout << " Sun Mon Tue Wed Thu Fri Sat\n";
// Get the first day of the month and its weekday index (0=Sun, 6=Sat)
year_month_day first_day{y / m / 1d};
weekday wd{sys_days{first_day}};
int start_pos = wd.c_encoding(); // 0 is Sunday
// Get the last day of the month to know how many days to print
auto last_day_val = (y / m / last).day();
unsigned total_days = (unsigned)last_day_val;
// Print leading spaces
for (int i = 0; i < start_pos; i++) std::cout << " ";
// Print all days of the month
for (unsigned d = 1; d <= total_days; d++) {
std::cout << std::setw(5) << d;
if ((start_pos + d) % 7 == 0) std::cout << "\n";
}
std::cout << "\n";
}
}
int main() {
int yr = 2026;
printYearCalendar(yr);
}
/*
run:
------------ January 2026 ------------
Sun Mon Tue Wed Thu Fri Sat
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
------------ February 2026 ------------
Sun Mon Tue Wed Thu Fri Sat
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
------------ March 2026 ------------
Sun Mon Tue Wed Thu Fri Sat
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
------------ April 2026 ------------
Sun Mon Tue Wed Thu Fri Sat
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
------------ May 2026 ------------
Sun Mon Tue Wed Thu Fri Sat
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
------------ June 2026 ------------
Sun Mon Tue Wed Thu Fri Sat
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
------------ July 2026 ------------
Sun Mon Tue Wed Thu Fri Sat
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
------------ August 2026 ------------
Sun Mon Tue Wed Thu Fri Sat
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
------------ September 2026 ------------
Sun Mon Tue Wed Thu Fri Sat
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
------------ October 2026 ------------
Sun Mon Tue Wed Thu Fri Sat
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
------------ November 2026 ------------
Sun Mon Tue Wed Thu Fri Sat
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
------------ December 2026 ------------
Sun Mon Tue Wed Thu Fri Sat
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
*/