2010-05-05 39 views
1

如何獲取SQLite以將Excel類型的序列號轉換爲日期,例如:我想要一個表中的整數40074以某種方式得到日期2009年9月18日?Excel/SQLite日期序列號

日期已在SQLite中。

回答

1
sqlite> SELECT DATE('1899-12-30', '+40074 days'); 
2009-09-18 
-1

Excel將日期存儲爲自1899年12月30日以來的天數,因此要將數字轉換爲日期或從日期轉換爲數字,您只需計算從1899年12月30日到您的日期之間的天數後。你如何做到這一點取決於你的工作中到底哪個語言,但對於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,它的因爲實際時代應該是1/1/1900,但Excel中錯誤地假定1900年是閏年)

+0

對不起,我特別詢問了在SQLite中的工作。我沒有理解系統或使用其他語言(Python是我的最愛)。 – 2010-05-05 02:33:32

+1

同樣的原則適用;它只是不同的語法。 – dan04 2010-05-05 06:45:50

+1

事實上,它是蓮花123使用1/1/1900作爲時代,而錯誤地假設1900年是一個閏年。對於Excel(VBScript),他們通過將紀元的日期放回來糾正了這一點。對於1900年2月29日以後的所有日期,Excel和Lotus 123都同意,但它們之前的日期不同(但Excel實際上正確)。 – 2011-03-08 12:10:19

2

這似乎工作:

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

老實說,我只是猜測,並檢查了在那裏常數,但我相信有簡單的數學t o備份它。

看起來它的工作日期早於紀元,但我沒有完全測試它。