minguiluo 2022-02-17 11:12 采纳率: 0%
浏览 13

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

如果改造这个函数呢?

  • 写回答

1条回答 默认 最新

  • 码老头 2022-02-17 11:56
    关注

    最简单,直接的方式:

    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
    
    评论

报告相同问题?

问题事件

  • 创建了问题 2月17日