Конвертировать Sqlite BigInt на сегодняшний день - PullRequest
4 голосов
/ 27 августа 2009

У меня есть база данных Sqlite, которую я использую в качестве хранилища заданий ado.net для моих заданий планировщика Quartz.net. В одной таблице столбец с именем START_TIME имеет тип big int.

Есть ли способ приведения или конвертации бигинта в значение даты? Я хотел бы иметь возможность запрашивать базу данных, чтобы увидеть, какие задания запланированы на какую дату / время, и значение, например 633869892000000000, не имеет смысла.

Спасибо!

Ответы [ 3 ]

7 голосов
/ 12 января 2017

Мне показалось, что это работает; выберите дату и время (DateColumn / 10000000 - 62135596800, 'unixepoch') в YourTable

Кредиты для; https://forums.xamarin.com/discussion/54282/sqlite-datetime-convert-to-net-datetime

7 голосов
/ 27 августа 2009

Предполагая, что START_TIME - это стандартная секунда с начала эпохи Unix, вы можете использовать:

select datetime(MyBigIntColumn, 'unixepoch');

См. http://www.sqlite.org/lang_datefunc.html, Раздел «Модификаторы».

2 голосов
/ 27 ноября 2013

Это сотни наносекунд (1 нс = 1/10 ^ 9 секунд) с начала Common Age (CA) или Рождества. Чтобы преобразовать дату из этого формата в обычную дату:

1. Сначала вам нужно преобразовать 633869892000000000 = YourDateHundredsOfNanoSecondsCA в 100 нсекунд в формат Unixepoch (секунды с 1 января 1970 года до вашей даты) по формуле:

(YourDateHundredsOfNanoSecondsCA- (круглый (1969 * (365 + 1 / 4-1 / 100 + 1/400), 0) -2) * 24 * 60 * 60 * 1E9 / 100) * 100 / 1E9,

где:

1.1 КРУГЛЫЙ (1969 * (365 + 1 / 4-1 / 100 + 1/400), 0) -2) = DaysOf1970Years - количество дней от рождения Иеаса до 1 января 1970 года.

1.2 Сотни нано секунд, 1970 лет = дней, 1970 лет * 24 * 60 * 60 * 1E9 / 100 - сотни наносекунд с начала Общего века до начала эпохи Unix (1 января 1970 года).

1.3 YourDateInUnixEpochSeconds = (YourDateHundredsOfNanoSecondsCA-HundredsOfNanoSecondsOf1970Years) * 100 / 1E9 - количество секунд с 01.01.1970 до вашей даты.

2. Конвертируйте дату формата Unix Epoch в читаемый формат по функциям (я приведу пример для SQLite):

ВЫБРАТЬ дату и время (YourDateInUnixEpochSeconds, 'unixepoch');

Для вашего примера вы можете скопировать эту строку в редактор SQL-запросов в SQLiteStudio и запустить:

ВЫБРАТЬ дату / время ((633869892000000000- (ТУР (1969 * (365 + 1 / 4-1 / 100 + 1/400), 0) -2) * 24 * 60 * 60 * 1E9 / 100) * 100 / 1E9 , 'unixepoch');

и в результате вы получите '2010-12-19 17: 00: 00'

...