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);
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 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);
 }