2013-05-25 4 views
0

Я запрашиваю базу данных оракула, в которой есть столбец «Старт».Oracle Date from Int C#

Мой запрос возвращает 10 значное число в этом столбце:

1369423190 
1369423574 
1369424520 

Моя проблема заключается в преобразовании этих значений обратно к DateTime в 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 

Что я здесь делаю неправильно?

* Update *

Я обновил свой код, но результаты откусил:

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 

ответ

1

число хранится в базе данных в Unix Time, количество секунд, прошедших с 1/1/1970 12:00:00 AM. В .Net DateTime constructor вы используете галочки, число которых составляет 100ns интервалов с 01.01.00 00:00.

Так что вам нужно преобразовать время Unix в .NET. См. How do you convert epoch time in C#? для получения ответа.

0

Попробуйте это:

var yourTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(1369423190).ToLocalTime();