Spreadsheetgear:转换为Datetime

时间:2017-02-27 15:36:16

标签: c# excel datetime spreadsheetgear

我正在尝试解析Excel工作表中的单元格值并使用以下代码将其转换为Datetime。但是我收到的错误是:

  

'arguments.CurrentWorksheet.Workbook.NumberToDateTime(inpDate)'扔了   'System.ArgumentOutOfRangeException'类型的例外       base:{“指定的参数超出有效值范围。\ r \ n参数名称:无效的日期 - 时间序列号。”}       ActualValue:null       消息:“指定的参数超出了有效值的范围。\ r \ n参数名称:无效的日期 - 时间序列号。”

代码:

double inpDate = arguments.GetNumber(2);
startDate = arguments.CurrentWorksheet.Workbook.NumberToDateTime(inpDate);

表中的inpDate是20170113。

你能告诉我吗?

感谢。

1 个答案:

答案 0 :(得分:1)

您的inpDate不是有效的“Excel日期”。日期/时间存储在SpreadsheetGear和Excel中,作为double表示日期/时间序列号。整数代表天数,值1是1900年1月1日,数字的小数部分代表时间(即0.5是中午)。因此,例如,值42793.0代表2017年2月27日(12:00 AM)。您可以在以下信息页面上阅读有关Excel日期的更多信息: http://www.cpearson.com/excel/datetime.htm

IWorkbook。NumberToDateTime(...)期待这种序列日期,但您输入的'20170113'(我假设应该代表2017年1月13日)被解释为日期方式未来,就像接近57,160年(从1900年1月1日起20,170,113天)的某个地方,这在Excel / SpreadsheetGear中太过遥远。

对于您的特定情况,使用DateTime似乎更合适。ParseExact(...),例如:

DateTime dateTime = DateTime.ParseExact("20170113", "yyyyMMdd", CultureInfo.CurrentCulture);