File tree 1 file changed +22
-22
lines changed
1 file changed +22
-22
lines changed Original file line number Diff line number Diff line change @@ -52,37 +52,37 @@ fn print_month(month: u32, year: u32) {
52
52
_ => unreachable ! ( ) ,
53
53
} ;
54
54
55
- println ! ( "{} {}" , month_name, year) ;
55
+ println ! ( " {} {}" , month_name, year) ;
56
56
println ! ( "{}" , gettext( "Su Mo Tu We Th Fr Sa" ) ) ;
57
57
58
- let mut day = 1 ;
59
- let mut weekday = 1 ;
60
- let mut days_in_month = 31 ;
61
- if month == 4 || month == 6 || month == 9 || month == 11 {
62
- days_in_month = 30 ;
63
- } else if month == 2 {
64
- if year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 ) {
65
- days_in_month = 29 ;
66
- } else {
67
- days_in_month = 28 ;
58
+ let first_day = chrono:: NaiveDate :: from_ymd_opt ( year as i32 , month, 1 ) . unwrap ( ) ;
59
+ let start_weekday = first_day. weekday ( ) . num_days_from_sunday ( ) ; // 0 (Sun) to 6 (Sat)
60
+
61
+ let days_in_month = match month {
62
+ 4 | 6 | 9 | 11 => 30 ,
63
+ 2 => {
64
+ if year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 ) {
65
+ 29
66
+ } else {
67
+ 28
68
+ }
68
69
}
70
+ _ => 31 ,
71
+ } ;
72
+
73
+ // Print initial padding
74
+ for _ in 0 ..start_weekday {
75
+ print ! ( " " ) ;
69
76
}
70
77
71
- while day <= days_in_month {
72
- print ! ( "{:2}" , day) ;
73
- day += 1 ;
74
- weekday += 1 ;
75
- if weekday > 7 {
78
+ for day in 1 ..=days_in_month {
79
+ print ! ( "{:2} " , day) ;
80
+ if ( start_weekday + day) % 7 == 0 {
76
81
println ! ( ) ;
77
- weekday = 1 ;
78
- } else {
79
- print ! ( " " ) ;
80
82
}
81
83
}
82
84
83
- if weekday != 1 {
84
- println ! ( ) ;
85
- }
85
+ println ! ( ) ;
86
86
}
87
87
88
88
fn print_year ( year : u32 ) {
You can’t perform that action at this time.
0 commit comments