File tree Expand file tree Collapse file tree 1 file changed +22
-22
lines changed Expand file tree Collapse file tree 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) {
5252 _ => unreachable ! ( ) ,
5353 } ;
5454
55- println ! ( "{} {}" , month_name, year) ;
55+ println ! ( " {} {}" , month_name, year) ;
5656 println ! ( "{}" , gettext( "Su Mo Tu We Th Fr Sa" ) ) ;
5757
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+ }
6869 }
70+ _ => 31 ,
71+ } ;
72+
73+ // Print initial padding
74+ for _ in 0 ..start_weekday {
75+ print ! ( " " ) ;
6976 }
7077
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 {
7681 println ! ( ) ;
77- weekday = 1 ;
78- } else {
79- print ! ( " " ) ;
8082 }
8183 }
8284
83- if weekday != 1 {
84- println ! ( ) ;
85- }
85+ println ! ( ) ;
8686}
8787
8888fn print_year ( year : u32 ) {
You can’t perform that action at this time.
0 commit comments