@@ -952,6 +952,7 @@ static char *date_format(char *format, int format_len, timelib_time *t, int loca
952
952
timelib_time_offset * offset = NULL ;
953
953
timelib_sll isoweek , isoyear ;
954
954
int rfc_colon ;
955
+ int weekYearSet = 0 ;
955
956
956
957
if (!format_len ) {
957
958
return estrdup ("" );
@@ -978,7 +979,6 @@ static char *date_format(char *format, int format_len, timelib_time *t, int loca
978
979
offset = timelib_get_time_zone_info (t -> sse , t -> tz_info );
979
980
}
980
981
}
981
- timelib_isoweek_from_date (t -> y , t -> m , t -> d , & isoweek , & isoyear );
982
982
983
983
for (i = 0 ; i < format_len ; i ++ ) {
984
984
rfc_colon = 0 ;
@@ -994,8 +994,12 @@ static char *date_format(char *format, int format_len, timelib_time *t, int loca
994
994
case 'z' : length = slprintf (buffer , 32 , "%d" , (int ) timelib_day_of_year (t -> y , t -> m , t -> d )); break ;
995
995
996
996
/* week */
997
- case 'W' : length = slprintf (buffer , 32 , "%02d" , (int ) isoweek ); break ; /* iso weeknr */
998
- case 'o' : length = slprintf (buffer , 32 , "%d" , (int ) isoyear ); break ; /* iso year */
997
+ case 'W' :
998
+ if (!weekYearSet ) { timelib_isoweek_from_date (t -> y , t -> m , t -> d , & isoweek , & isoyear ); weekYearSet = 1 ; }
999
+ length = slprintf (buffer , 32 , "%02d" , (int ) isoweek ); break ; /* iso weeknr */
1000
+ case 'o' :
1001
+ if (!weekYearSet ) { timelib_isoweek_from_date (t -> y , t -> m , t -> d , & isoweek , & isoyear ); weekYearSet = 1 ; }
1002
+ length = slprintf (buffer , 32 , "%d" , (int ) isoyear ); break ; /* iso year */
999
1003
1000
1004
/* month */
1001
1005
case 'F' : length = slprintf (buffer , 32 , "%s" , mon_full_names [t -> m - 1 ]); break ;
0 commit comments