@@ -948,6 +948,7 @@ static char *date_format(char *format, int format_len, timelib_time *t, int loca
948
948
timelib_time_offset * offset = NULL ;
949
949
timelib_sll isoweek , isoyear ;
950
950
int rfc_colon ;
951
+ int weekYearSet = 0 ;
951
952
952
953
if (!format_len ) {
953
954
return estrdup ("" );
@@ -974,7 +975,6 @@ static char *date_format(char *format, int format_len, timelib_time *t, int loca
974
975
offset = timelib_get_time_zone_info (t -> sse , t -> tz_info );
975
976
}
976
977
}
977
- timelib_isoweek_from_date (t -> y , t -> m , t -> d , & isoweek , & isoyear );
978
978
979
979
for (i = 0 ; i < format_len ; i ++ ) {
980
980
rfc_colon = 0 ;
@@ -990,8 +990,12 @@ static char *date_format(char *format, int format_len, timelib_time *t, int loca
990
990
case 'z' : length = slprintf (buffer , 32 , "%d" , (int ) timelib_day_of_year (t -> y , t -> m , t -> d )); break ;
991
991
992
992
/* week */
993
- case 'W' : length = slprintf (buffer , 32 , "%02d" , (int ) isoweek ); break ; /* iso weeknr */
994
- case 'o' : length = slprintf (buffer , 32 , "%d" , (int ) isoyear ); break ; /* iso year */
993
+ case 'W' :
994
+ if (!weekYearSet ) { timelib_isoweek_from_date (t -> y , t -> m , t -> d , & isoweek , & isoyear ); weekYearSet = 1 ; }
995
+ length = slprintf (buffer , 32 , "%02d" , (int ) isoweek ); break ; /* iso weeknr */
996
+ case 'o' :
997
+ if (!weekYearSet ) { timelib_isoweek_from_date (t -> y , t -> m , t -> d , & isoweek , & isoyear ); weekYearSet = 1 ; }
998
+ length = slprintf (buffer , 32 , "%d" , (int ) isoyear ); break ; /* iso year */
995
999
996
1000
/* month */
997
1001
case 'F' : length = slprintf (buffer , 32 , "%s" , mon_full_names [t -> m - 1 ]); break ;
0 commit comments