我正在查询一个有“Start”列的oracle数据库。
我的查询在此列中返回一个10位整数:
1369423190
1369423574
1369424520
我的问题是将这些值转换回c#
中的日期时间start = reader.GetInt64(17);
dt = new DateTime(start);
strStart = dt.ToString();
此代码当前为strStart返回以下值:
1/1/0001 12:02:16 AM
1/1/0001 12:02:16 AM
1/1/0001 12:02:16 AM
我在这里做错了什么?
*的 更新 *
我更新了我的代码,但结果有点偏离:
var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
l = (long)reader.GetInt64(17);
epoch = epoch.AddSeconds(l);
Start = epoch.ToString();
10/15/2056 2:46:04 PM
10/7/2273 7:46:20 PM
12/15/2403 12:21:01 PM
答案 0 :(得分:1)
数据库中存储的数字为Unix Time,即自1970年1月1日凌晨00:00:00起的秒数。您正在使用的.Net DateTime constructor取自上标时间,即自1/1/0001 12:00:00 AM开始的100ns间隔数。
所以你需要从Unix时间转换为.NET。请参阅How do you convert epoch time in C#?获取答案。
答案 1 :(得分:0)
试试这个:
var yourTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(1369423190).ToLocalTime();