为什么DateTime没有正确取消装箱?

时间:2017-10-17 03:15:30

标签: c# datetime

我正在对DateTime进行简单的对象转换。该对象也是DateTime。但是,未装箱的值与对象不同。

我甚至试过System.Convert.ToDateTime(value),但没有任何区别。

这里发生了什么,我失踪了。

private object Convert(object value, DateTimeConversionTypes dateTimeConversionTypes)
{
    switch (dateTimeConversionTypes)
    {
        case DateTimeConversionTypes.ToLocal:
        {
            if (!(value is DateTimeOffset)) return null;
            var dtValue = (DateTimeOffset)value;
            if (dtValue == DateTimeOffset.MinValue) return null;
            var returnValue = dtValue.ToLocalTime().DateTime;
            returnValue = DateTime.SpecifyKind(returnValue, DateTimeKind.Local);
            return returnValue;
        }
        case DateTimeConversionTypes.ToUtc:
        {
            if (!(value is DateTime)) return null;
            var dtValue = (DateTime)value;
            if (dtValue == DateTime.MinValue) return null;
            var returnValue = dtValue.ToUniversalTime();
            returnValue = DateTime.SpecifyKind(returnValue, DateTimeKind.Utc);
            return new DateTimeOffset(returnValue);
        }
        default:
            throw new ArgumentOutOfRangeException(nameof(dateTimeConversionTypes), dateTimeConversionTypes, null);
    }
}

enter image description here

2 个答案:

答案 0 :(得分:0)

我不知道怎么做,但我猜测dtValue被创建为' DateTimeOffset' (这就是为什么它的文本表示有+00:00)。

答案 1 :(得分:-1)

我想我找到了答案并需要社区确认。

这是由于交换机案例中使用的变量名称相同。尽管有括号并且具有坚固的范围,但仍然以某种方式(不知道为什么)它将两个变量视为相同。当我将变量名称更改为唯一名称时,它开始执行所需的行为。