当收到的数据是24小时格式时,C#AddDays抛出ArgumentOutOfRangeException

时间:2014-01-11 09:55:36

标签: c# datetime

这是我的问题。我正在导入带有时间字段的字段的Excel文件。在我做的时候在某些服务器上(法语)

double cellValueAsDouble = double.Parse(cellValue.Replace(".", ","));
MyDate.AddDays(cellValueAsDouble);

添加超过12小时它的工作原理。但是在另一台服务器上(英文)我抛出ArgumentOutOfRangeException时出错。如果我放的时间少于或是12:00:00,它可以正常工作。有谁知道为什么以及如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我试着猜测答案:

  1. cellValue包含逗号作为小数点分隔符。所以这是 价值是例如0,5833333333
  2. 您可以使用point =>替换逗号; 0.5833333 -
  3. 在法语服务器上将其转换为double会显示58333333333
  4. 将此项添加到日期会产生异常。
  5. 您的软件不希望将点'.'作为小数点分隔符,而是在目标系统上配置的任何内容。只要excel源保留在同一台计算机上,您就不必进行任何交换。

    另外,它是真的和XLS格式还是你在谈论CSV?如果您的数据来自以CSV格式导出的法语EXCEL,则最终将使用逗号格式化十进制值。现在,您在本地 PC(我猜有美国文化)上检查您的软件,然后添加代码以用点替换逗号。哇,它现在适用于您的PC!但是不要指望相同的代码可以在另一台机器上运行。

    您必须手动解析十进制值,或者只是依赖于数据源(您的EXCEL数据)在与运行应用程序的计算机具有相同文化设置的计算机上格式化。

    有人猜测为什么值小于12:00的工作:可能是偶然的。如果您检查06:00它将0,25为十进制并转换为25,这是完全正常的(好吧,它不会抛出异常)。

    请不要忘记:这只是猜测,因为我们还没有看到所有相关信息。

答案 1 :(得分:1)

Its probably a problem with the culture and the decimal point.

使用此选项将单元格值转换为'。'作为小数点:

Double.Parse(cellValue, CultureInfo.InvariantCulture);