static readonly DateTime march1st1900 = new DateTime(1900, 03, 01);
static readonly DateTime december31st1899 = new DateTime(1899, 12, 31);
static readonly DateTime january1st1904 = new DateTime(1904, 01, 01);
static readonly TimeSpan date1904adjustment = new TimeSpan(4 * 365 + 2, 0, 0, 0, 0);
static readonly TimeSpan before1stMarchAdjustment = new TimeSpan(1, 0, 0, 0);
bool date1904 = ActiveWorkbook.Date1904;
object ConvertDateToExcelDate(DateTime date)
{
if (date1904)
{
if (date >= january1st1904)
return date - date1904adjustment;
else
return date.ToString(DateFormat, DateFormatProvider);
}
if (date >= march1st1900)
return date;
if (date < march1st1900 && date > december31st1899)
return date - before1stMarchAdjustment;
return date.ToString(DateFormat, DateFormatProvider);
}
DateTime ConvertExcelDateToDate(object excelDate)
{
DateTime date = (DateTime)excelDate;
if (Date1904)
return date + date1904adjustment;
if (date < march1st1900)
return date + before1stMarchAdjustment;
return date;
}
-------------------------------------------------------------------------------------
从EXCEL中读取文本,数值型数据都很简单,EXCEL没有做其他转换,
可是读取日期数据就出现了一个问题:
EXCEL保存日期数据实际上存放的是时间戳,从1900年开始算起。
也就是说 1900-1-1 在EXCEL中表示为 1 。
OK,明白了这个原理之后就可以开始操作了 :
![](http://kb.cnblogs.com/Images/OutliningIndicators/None.gif)