Convert.ChangeType DateTime 入库默认值问题 0001-01-01 00:00:00

public static T GetObjTranNull<T>(object obj) {
        try {
            if(obj == null) {
                return (T)System.Convert.ChangeType("",typeof(T),CultureInfo.InvariantCulture);
            } else {
                if(obj.GetType() == typeof(T))
                    return (T)obj;
            }
            return (T)System.Convert.ChangeType(obj,typeof(T),CultureInfo.InvariantCulture);
        } catch { }
        return default(T);
    }

给出的默认值是:0001-01-01 00:00:00
SQL Server 日期字段不认这个 认的是 1900-01-01 00:00:00

如果改造这个函数呢?

最简单,直接的方式:

using System.Globalization;

var result = GetObjTranNull<DateTime>(null);
Console.WriteLine(result);
var result2 = GetObjTranNull<DateTime>(DateTime.Now);
Console.WriteLine(result2);

static T GetObjTranNull<T>(object obj) {
    try {
        if(obj == null) {
            if (typeof(T) == typeof(DateTime))
            {
                return (T)(object)(new DateTime(1900, 1, 1));
            }
            return (T)Convert.ChangeType("",typeof(T),CultureInfo.InvariantCulture);
        }

        if(obj.GetType() == typeof(T))
            return (T)obj;
        return (T)Convert.ChangeType(obj,typeof(T),CultureInfo.InvariantCulture);
    } catch { }
    return default(T);
}

运行结果:

1900-01-01 00:00:00
2022-02-17 11:56:06