/*
This program determines the day of the week for January 1st of a given year.
Approach:
---------
Rust’s community‑standard chrono crate provides:
- NaiveDate::from_ymd_opt(year, month, day) : constructs a calendar date safely
- Datelike::weekday(&self) : returns a Weekday enum
Weekday values:
Monday, Tuesday, Wednesday, Thursday,
Friday, Saturday, Sunday
This avoids manual calendar arithmetic and uses efficient, well‑tested routines.
*/
use chrono::{NaiveDate, Weekday, Datelike};
// Convert Weekday enum to a readable string
fn weekday_name(wd: Weekday) -> &'static str {
match wd {
Weekday::Mon => "Monday",
Weekday::Tue => "Tuesday",
Weekday::Wed => "Wednesday",
Weekday::Thu => "Thursday",
Weekday::Fri => "Friday",
Weekday::Sat => "Saturday",
Weekday::Sun => "Sunday",
}
}
// Compute weekday of January 1st for a given year
fn jan1_weekday(year: i32) -> &'static str {
// from_ymd_opt returns Option<NaiveDate>; we expect valid input here
let date_value: NaiveDate =
NaiveDate::from_ymd_opt(year, 1, 1).expect("Invalid date for given year");
// Datelike::weekday is a public trait method
let wd: Weekday = date_value.weekday();
weekday_name(wd)
}
fn main() {
let year: i32 = 2026;
let result: &str = jan1_weekday(year);
println!("January 1st, {} falls on a {}.", year, result);
}
/*
run:
January 1st, 2026 falls on a Thursday.
*/