来自Int C的Oracle日期#

时间:2013-05-25 03:26:20

标签: c# oracle date

我正在查询一个有“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

2 个答案:

答案 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();