0

我正在查询具有“开始”列的 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
4

2 回答 2

1

存储在数据库中的数字是Unix Time,即自 1/1/1970 12:00:00 AM 以来的秒数。您正在使用的 .Net DateTime 构造函数获取刻度,这是自 0001 年 1 月 1 日凌晨 12:00:00 以来 100ns 间隔的数量。

因此,您需要将 Unix 时间转换为 .NET。请参阅如何在 C# 中转换纪元时间?寻求答案。

于 2013-05-25T03:36:18.970 回答
0

尝试这个:

var yourTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(1369423190).ToLocalTime();
于 2013-05-25T03:38:27.020 回答