Порядковые номера даты Excel/SQLite

Как я могу заставить SQLite преобразовывать порядковые номера типа Excel в даты, например, Я хочу, чтобы целое число 40074 в таблице так или иначе получило дату 18 сентября 2009?

Даты уже находятся в SQLite.

1
задан John Smith 5 May 2010 в 02:06
поделиться

3 ответа

sqlite> SELECT DATE('1899-12-30', '+40074 days');
2009-09-18
1
ответ дан 3 September 2019 в 00:47
поделиться

Кажется, это работает:

sqlite> SELECT DATETIME((49400 * 3600 * 24) - 3014928000, 'unixepoch');
2009-09-18 00:00:00

Честно говоря, я просто угадал и проверил там константу, но я уверен, что есть простая математика, чтобы подкрепить это.

Похоже, что это работает и для дат, более ранних, чем эпоха, но я не проверял это тщательно.

2
ответ дан 3 September 2019 в 00:47
поделиться

Excel сохраняет даты как количество дней с 30 декабря 1899 г., чтобы преобразовать число до / от даты, вам просто нужно рассчитать количество дней между 30 декабря 1899 года и датой, после которой вы находитесь. Как вы это сделаете, зависит от того, на каком именно языке вы работаете, но для C #, например, будет работать следующее:

var epoch = new DateTime(1899, 12, 30);

int number = 40074;
var date = epoch.AddDays(number);
Console.WriteLine(date);

var date = new DateTime(1987, 5, 3);
int number = (int) date.Subtract(epoch).TotalDays;
Console.WriteLine(number);

(Если вам интересно, почему эпоха 30/12/1899, это потому, что фактическая эпоха должна быть 01.01.1900, но Excel ошибочно предполагает, что 1900 был високосным)

-1
ответ дан 3 September 2019 в 00:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: