ScopeToTimeZone method
      
  
DateTime
ScopeToTimeZone(
    
- ExchangeServiceBase service,
 - DateTime dateTime,
 - PropertyBag propertyBag,
 - bool isUpdateOperation,
 
override
    Implementation
@override
DateTime ScopeToTimeZone(ExchangeServiceBase service, DateTime dateTime,
    PropertyBag propertyBag, bool isUpdateOperation) {
  if (!propertyBag.Owner!.GetIsCustomDateTimeScopingRequired()) {
    // Most item types do not require a custom scoping mechanism. For those item types,
    // use the default scoping mechanism.
    return super
        .ScopeToTimeZone(service, dateTime, propertyBag, isUpdateOperation);
  } else {
    // Appointment, however, requires a custom scoping mechanism which is based on an
    // associated time zone property.
    PropertyDefinition timeZoneProperty =
        this.GetTimeZoneProperty(service.RequestedServerVersion);
    Object? timeZonePropertyValue = null;
    // todo : uncomment
//                bool timeZonePropertyIsSet = propertyBag.TryGetProperty(timeZoneProperty, out timeZonePropertyValue);
    if (timeZonePropertyValue != null &&
        propertyBag.IsPropertyUpdated(timeZoneProperty)) {
      // If we have the associated time zone property handy and if it has been updated locally,
      // then we scope the date time to that time zone.
      try {
        // todo : fix time zone converting
        DateTime convertedDateTime =
            EwsUtilities.ConvertTime(dateTime, TimeZone.UTC, TimeZone.UTC);
        return convertedDateTime;
//                        DateTime convertedDateTime = EwsUtilities.ConvertTime(
//                            dateTime,
//                            (TimeZoneInfo)timeZonePropertyValue,
//                            TimeZoneInfo.Utc);
//
//                        // This is necessary to stamp the date/time with the Local kind.
//                        return new DateTime(convertedDateTime.Ticks, DateTimeKind.Utc);
      } on TimeZoneConversionException catch (ex, stacktrace) {
        throw new PropertyException(
            "InvalidDateTime($dateTime)", Name, ex, stacktrace);
      }
    } else {
      if (isUpdateOperation) {
        // In an update operation, what we do depends on what version of EWS
        // we are targeting.
        if (service.RequestedServerVersion ==
            ExchangeVersion.Exchange2007_SP1) {
          // For Exchange 2007 SP1, we still need to scope to the service's time zone.
          return super.ScopeToTimeZone(
              service, dateTime, propertyBag, isUpdateOperation);
        } else {
          // Otherwise, we let the server scope to the appropriate time zone.
          return dateTime;
        }
      } else {
        // In a Create operation, always scope to the service's time zone.
        return super.ScopeToTimeZone(
            service, dateTime, propertyBag, isUpdateOperation);
      }
    }
  }
}