text: Title: v1.Time Stringer implementation does not protect against nil-pointer dereference
  Body: ### What happened?
  
  The `v1.Time` struct implements the `Stringer` interface because the embedded type (`time.Time`) does. This is fine in production environments, even when the `*v1.Time` pointer is `nil` because of the [catchPanic](https://cs.opensource.google/go/go/+/refs/tags/go1.17.2:src/fmt/print.go;l=538-544) function in the Go standard library. This function will catch the nil-pointer dereference when trying to call the `String` method on the `nil` `*v1.Time` object. The result is `<nil>` is written.
  
  Again, this is all fine when running a production binary, but causes problems when trying to debug. Specifically, when debugging a program from Goland using `dlv`, the nil-pointer dereference is caught by the debugger and causes execution to pause. It also seems that the debugger does not allow the `catchPanic` function to `recover`. I say this because nil-pointer dereference error occurs constantly going forward (possibly related to the re-queuing nature our operator uses).
  
  If the `v1.Time` object had a `String()` method that protected against nil-pointer dereference (like the [IsZero](https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/time.go#L58-L64) method does), then this would not be a problem.
  
  ### What did you expect to happen?
  
  I would expect that the `v1.Time` object had a `String` method that protects against nil-pointer dereference.
  
  ### How can we reproduce it (as minimally and precisely as possible)?
  
  Running the following program:
  ```
  package main
  
  import (
  	"fmt"
  
  	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  )
  
  func main() {
  	t := &v1.Time{}
  	fmt.Printf("%s\n", t)
  
  	t = (*v1.Time)(nil)
  	fmt.Printf("%s\n", t)
  
  	fmt.Println(t.String())
  }
  ```
  
  will have the output:
  ```
  0001-01-01 00:00:00 +0000 UTC
  <nil>
  [signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0x1401f96]
  
  goroutine 1 [running]:
  main.main()
          $GOPATH/src/temp/main.go:16 +0xb6
  exit status 2
  ```
  
  ### Anything else we need to know?
  
  _No response_
  
  ### Kubernetes version
  
  <details>
  Rancher is currently using `v0.21.0` version of `k8s.io/apimachinery`
  </details>
  
  
  ### Cloud provider
  
  <details>
  
  </details>
  
  ### OS version
  
  <details>
  
  ```console
  # On Linux:
  $ cat /etc/os-release
  # paste output here
  $ uname -a
  # paste output here
  
  # On Windows:
  C:\> wmic os get Caption, Version, BuildNumber, OSArchitecture
  # paste output here
  ```
  
  </details>
  
  
  ### Install tools
  
  <details>
  
  </details>
  
  
  ### Container runtime (CRI) and and version (if applicable)
  
  <details>
  
  </details>
  
  
  ### Related plugins (CNI, CSI, ...) and versions (if applicable)
  
  <details>
  
  </details>
  