Excel中的日期

Tuesday, April 24, 2007

今天使用koogra库读取Excel数据时才知到原来Excel中的日期都是用数值表示的,并且在文件中也是使用数值存储,从而在程序读出来的是这个表示日期的数值。起始日期是1900-1-1 0:00:00 ,它对应数值1。1900-1-2 0:00:00 则对应数值2,也就是说表示日期的数值单位是天。

如果要根据读取对应的日期,使用下述语句便可以简单的完成。记得要把表示日期的数值-1,

   1: Convert.ToDateTime("1900-01-01 0:0:0").AddDays(date - 1)

然后,由于Excel为了保持与 Lotus-123 的兼容性,保留了Lotus-123 把1900年算成闰年的Bug(实际上不是),所以1900-2-29也同样占用了一个数值60,因此1900-3-1 0:00:00 对应的数值变成了61。但是在.NET中是没有这个bug,因此用上述代码返回日期时,60则返回1900-3-1 0:00:00 。为了兼容这个问题,需要把表示日期的数值再减去1才能得到正确的结果。正确代码如下,数值60和61都表示日期1900-3-1 0:00:00

   1: if(date<=60){
   2:     return Convert.ToDateTime("1900-01-01 0:0:0").AddDays(date - 1);
   3: }
   4: else{
   5:     return Convert.ToDateTime("1900-01-01 0:0:0").AddDays(date - 2);
   6: }

0 COMMENTS: