Excel / SQLitedate序列号

我怎样才能让SQLite转换为date的Exceltypes的序列号,例如我想在表中的整数40074以某种方式获得date2009年9月18日?

date已经在SQLite中。

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

这似乎工作:

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

老实说,我只是猜测和检查那里的常数,但我相信有简单的math来支持它。

它看起来好像比时代还早,但我还没有彻底地testing过它。

Excel将date存储为自1899年12月30日以来的天数,所以要将date转换为date,您只需计算从1899年12月30日到date之间的天数。 如何做到这一点取决于你正在使用哪种语言,但对于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年是一个闰年)