diff --git a/staging/src/k8s.io/apimachinery/pkg/util/duration/duration.go b/staging/src/k8s.io/apimachinery/pkg/util/duration/duration.go index 961ec5ed8b2..1bc1e3c81ff 100644 --- a/staging/src/k8s.io/apimachinery/pkg/util/duration/duration.go +++ b/staging/src/k8s.io/apimachinery/pkg/util/duration/duration.go @@ -83,7 +83,11 @@ func HumanDuration(d time.Duration) string { } else if hours < 24*365*2 { return fmt.Sprintf("%dd", hours/24) } else if hours < 24*365*8 { - return fmt.Sprintf("%dy%dd", hours/24/365, (hours/24)%365) + dy := int(hours/24) % 365 + if dy == 0 { + return fmt.Sprintf("%dy", hours/24/365) + } + return fmt.Sprintf("%dy%dd", hours/24/365, dy) } return fmt.Sprintf("%dy", int(hours/24/365)) } diff --git a/staging/src/k8s.io/apimachinery/pkg/util/duration/duration_test.go b/staging/src/k8s.io/apimachinery/pkg/util/duration/duration_test.go index a6523904bc6..69bcf27dfe6 100644 --- a/staging/src/k8s.io/apimachinery/pkg/util/duration/duration_test.go +++ b/staging/src/k8s.io/apimachinery/pkg/util/duration/duration_test.go @@ -74,9 +74,14 @@ func TestHumanDurationBoundaries(t *testing.T) { {d: 8 * 24 * time.Hour, want: "8d"}, {d: 8*24*time.Hour + 23*time.Hour, want: "8d"}, {d: 2*365*24*time.Hour - time.Millisecond, want: "729d"}, - {d: 2 * 365 * 24 * time.Hour, want: "2y0d"}, - {d: 2*365*24*time.Hour + 23*time.Hour, want: "2y0d"}, - {d: 3 * 365 * 24 * time.Hour, want: "3y0d"}, + {d: 2 * 365 * 24 * time.Hour, want: "2y"}, + {d: 2*365*24*time.Hour + 23*time.Hour, want: "2y"}, + {d: 2*365*24*time.Hour + 23*time.Hour + 59*time.Minute, want: "2y"}, + {d: 3 * 365 * 24 * time.Hour, want: "3y"}, + {d: 4 * 365 * 24 * time.Hour, want: "4y"}, + {d: 5 * 365 * 24 * time.Hour, want: "5y"}, + {d: 6 * 365 * 24 * time.Hour, want: "6y"}, + {d: 7 * 365 * 24 * time.Hour, want: "7y"}, {d: 8*365*24*time.Hour - time.Millisecond, want: "7y364d"}, {d: 8 * 365 * 24 * time.Hour, want: "8y"}, {d: 8*365*24*time.Hour + 364*24*time.Hour, want: "8y"},