code: private void updateTimeZone(final TimeZone timezone) {
          this.timeZone = timezone;
          if (timezone != null) {
              if (getDate() != null && !(getDate() instanceof DateTime)) {
                  throw new UnsupportedOperationException(
                          "TimeZone is not applicable to current value");
              }
              if (getDate() != null) {
                  ((DateTime) getDate()).setTimeZone(timezone);
              }
  
              getParameters().replace(new TzId(timezone.getID()));
          } else {
              // use setUtc() to reset timezone..
              setUtc(isUtc());
          }
      }
docs: Updates the timezone associated with the property's value. If the specified timezone is equivalent to UTC any
  existing TZID parameters will be removed. Note that this method is only applicable where the current date is an
  instance of <code>DateTime</code>. For all other cases an <code>UnsupportedOperationException</code> will be
  thrown.
  
  @param timezone