Spreadsheetgear:转换为日期时间时出错

Spreadsheetgear: Error converting to Datetime

我正在尝试解析 excel sheet 中的单元格值并使用以下 code.But 将其转换为 Datetime 我收到错误消息:

'arguments.CurrentWorksheet.Workbook.NumberToDateTime(inpDate)' threw an exception of type 'System.ArgumentOutOfRangeException' base: {"Specified argument was out of the range of valid values.\r\nParameter name: Invalid date-time serial number."} ActualValue: null Message: "Specified argument was out of the range of valid values.\r\nParameter name: Invalid date-time serial number."

代码:

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

其中 sheet 中的 inpDate 是 20170113。

请问有什么建议吗?

谢谢。

您的 inpDate 不是有效的 "Excel date." Dates/times 存储在 SpreadsheetGear 中,Excel 作为 double 表示 date/time 序列号。整数代表天数,值 1 是 1900 年 1 月 1 日,数字的小数部分代表时间(即 0.5 是中午)。因此,例如,值 42793.0 表示 2017 年 2 月 27 日(上午 12:00)。您可以在以下信息页面上阅读有关 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);