.NET Framework读取Oracle日期转DateTime格式异常求解决办法
解决方法
方法一:直接从DataReader获取DateTime类型
不要先转成字符串再解析,OracleDataReader提供了原生的日期读取方法,能避免格式转换带来的问题:
// 通过列名获取索引,再读取DateTime int ordinal = dataReader.GetOrdinal("Date"); DateTime dt = dataReader.GetDateTime(ordinal); // 转换为你需要的标准格式,示例为"yyyy-MM-dd HH:mm:ss" string standardDate = dt.ToString("yyyy-MM-dd HH:mm:ss");
方法二:解析/Date(xxx)/格式的时间戳
如果确实只能拿到这种JSON风格的日期字符串,需要先提取其中的毫秒时间戳,再转换为DateTime:
string rawDateStr = dataReader["Date"].ToString(); // 提取时间戳数字部分 long timestampMs = long.Parse(rawDateStr.Trim('/').Replace("Date(", "").Replace(")", "")); // 从1970-01-01 UTC基准时间开始计算,按需转成本地时间或保留UTC时间 DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) .AddMilliseconds(timestampMs) .ToLocalTime(); // 输出标准格式字符串 string standardDate = dt.ToString("yyyy-MM-dd HH:mm:ss");
额外说明
出现/Date(1655788824000)/这种格式,通常是因为数据库字段存储的是JSON序列化后的日期字符串,而非Oracle原生的DATE/TIMESTAMP类型;或者是中间数据层(比如ORM框架)将日期序列化成该格式后存入数据库。如果条件允许,建议排查数据存储环节,直接存储Oracle原生日期类型,能从根源避免这类格式问题。
内容的提问来源于stack exchange,提问作者Jithin
相关产品推荐
相关产品推荐

