/// <summary>转为时间日期,转换失败时返回最小时间。支持字符串、整数(Unix秒)</summary> /// <param name="value">待转换对象</param> /// <param name="defaultValue">默认值。待转换对象无效时使用</param> /// <returns></returns> public virtual DateTimeOffset ToDateTimeOffset(Object value, DateTimeOffset defaultValue) { if (value == null || value == DBNull.Value) { return(defaultValue); } // 特殊处理字符串,也是最常见的 if (value is String str) { str = str.Trim(); if (str.IsNullOrEmpty()) { return(defaultValue); } if (DateTimeOffset.TryParse(str, out var n)) { return(n); } if (str.Contains("-") && DateTimeOffset.TryParseExact(str, "yyyy-M-d", null, DateTimeStyles.None, out n)) { return(n); } if (str.Contains("/") && DateTimeOffset.TryParseExact(str, "yyyy/M/d", null, DateTimeStyles.None, out n)) { return(n); } if (DateTimeOffset.TryParse(str, out n)) { return(n); } return(defaultValue); } // 特殊处理整数,Unix秒,绝对时间差,不考虑UTC时间和本地时间。 if (value is Int32 k) { return(k == 0 ? DateTimeOffset.MinValue : _dto1970.AddSeconds(k)); } if (value is Int64 m) { if (m > 100 * 365 * 24 * 3600L) { return(_dto1970.AddMilliseconds(m)); } else { return(_dto1970.AddSeconds(m)); } } try { return(Convert.ToDateTime(value)); } catch { return(defaultValue); } }