public override bool TryConvert <T>(ConvertingContext context, out T value) { if (context.Kind == ConvertingKind.MaxInclusive) { dynamic dynamicValue; if (typeof(DateTimeOffset).IsAssignableFrom(typeof(T))) { if (DateTimeOffset.TryParse(context.Value, out var parsed)) { // has no time if (!HasExplicitTime(parsed.Date, context.Value)) { // set the time to the latest moment parsed = new DateTimeOffset( parsed.Year, parsed.Month, parsed.Day, 23, 59, 59, parsed.Offset) .AddMilliseconds(999); } // I'm cheating here, I know dynamicValue = parsed; value = dynamicValue; return(true); } } else if (typeof(DateTime).IsAssignableFrom(typeof(T))) { if (DateTime.TryParse(context.Value, out var parsed)) { // has no time if (!HasExplicitTime(parsed, context.Value)) { // set the time to the latest moment parsed = new DateTime( parsed.Year, parsed.Month, parsed.Day, 23, 59, 59, 999 ); } // I'm cheating here, I know dynamicValue = parsed; value = dynamicValue; return(true); } } } value = default(T); return(false); }
public static T Convert <T>(string str, ConvertingKind kind = ConvertingKind.Unspecified) { var ctx = new ConvertingContext(str, kind); foreach (var converter in globalConverters) { if (converter.TryConvert <T>(ctx, out var result)) { return(result); } } return(default(T)); }
public override bool TryConvert <T>(ConvertingContext context, out T value) { if (!typeof(DateTimeOffset).IsAssignableFrom(typeof(T))) { value = default(T); return(false); } dynamic dynamicValue = DateTimeOffset.Parse(context.Value); // I'm cheating here, I know value = dynamicValue; return(true); }
public override bool TryConvert <T>(ConvertingContext context, out T value) { // this will let exceptions bubble up value = (T)Convert.ChangeType(context.Value, typeof(T)); return(true); }