/// <summary> /// Converts the given object to the type of this converter, using the specified context and culture information. /// </summary> /// <returns> /// An <see cref="T:System.Object"/> that represents the converted value. /// </returns> /// <param name="context">An <see cref="T:System.ComponentModel.ITypeDescriptorContext"/> that provides a format context. </param> /// <param name="culture">The <see cref="T:System.Globalization.CultureInfo"/> to use as the current culture. </param> /// <param name="value">The <see cref="T:System.Object"/> to convert. </param> /// <exception cref="T:System.NotSupportedException">The conversion cannot be performed. </exception> public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { string @string = value as string; if (@string != null) { LocalDateTime localDateTime; if (TimeHelpers.GetLocalDateTimePatterns(culture).TryParseAny(@string.Trim(), out localDateTime)) { return(localDateTime); } DateTime dateTime; if (DateTime.TryParse(@string, out dateTime)) { return(LocalDateTime.FromDateTime(dateTime)); } throw new NotSupportedException( // ReSharper disable once AssignNullToNotNullAttribute string.Format(Resources.LocalDateTimeConverter_ConvertFrom_CannotParse, @string)); } if (value is DateTime) { DateTime dateTime = (DateTime)value; return(LocalDateTime.FromDateTime(dateTime)); } if (value is DateTimeOffset) { DateTimeOffset dateTimeOffset = (DateTimeOffset)value; return(LocalDateTime.FromDateTime(dateTimeOffset.LocalDateTime)); } if (value is OffsetDateTime) { OffsetDateTime offsetDateTime = (OffsetDateTime)value; return(offsetDateTime.LocalDateTime); } if (value is Instant) { Instant instant = (Instant)value; return(instant.InUtc().LocalDateTime); } if (value is ZonedDateTime) { ZonedDateTime zonedDateTime = (ZonedDateTime)value; return(zonedDateTime.LocalDateTime); } return(base.ConvertFrom(context, culture, value)); }