C # запрос даты и времени от SQLite базы данных не удается - PullRequest
1 голос
/ 14 декабря 2011

Я читаю файл sqlite, в котором данные столбца даты и времени сохраняются как целочисленные значения (INTEGER NO NULL)

DateTime dt=reader.GetDateTime(nColDateTime);

Но выдается ошибка, говорящая о том, что возвращаемое значение имеет неправильный формат. Я пробую все другие доступные методы в классе Datetime и нахожу только

DateTime dt=DateTime.FromBinary(reader.GetInt64(nColDateTime));

работает (так как другие возвращают исключения). Но форматированная дата (как dt.ToShortDateTime ()) неверна (т.е. 0042/11/20), я понятия не имею, что это такое. Я тогда попробую это

long d=DateTime.Now.Ticks-reader.GetInt64(nColDateTime);
DateTime dt=new DateTime(d);

Это дает мне 1970/05/18

Не могли бы вы помочь мне получить правильную дату и время?

1 Ответ

1 голос
/ 14 декабря 2011

Ваши даты хранятся в формате эпохи Unix.

Вы, вероятно, просто хотите использовать:

private static readonly DateTime epoch = new DateTime(1970, 1, 1);

...

var myDate = epoch + TimeSpan.FromTicks(reader.GetInt64(nColDateTime));
<ч />

Например, когда я смотрю на ваш пример выше "1970/05/18", я могу предположить, что ваша дата примерно на 5 месяцев, на 18 дней раньше, чем сегодня.

Вот как я могу получить исходное значение:

(DateTime.Today - new DateTime(1970, 5, 18)).Ticks

Что возвращает:

13119840000000000

Включите это в мою формулу:

new DateTime(1970, 1, 1) + TimeSpan.FromTicks(13119840000000000)

Возвращает:

2011/07/30
...