2014-01-11 24 views
0

這是我的問題。我正在導入帶有時間字段的字段的Excel文件。在某些服務器上(法語)當我做時當收到的數據是24小時格式時,C#AddDays拋出ArgumentOutOfRangeException

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

增加超過12小時它的工作。但在另一臺服務器上(英文),我有一個拋出ArgumentOutOfRangeException的錯誤。如果我放不到或12:00:00,它工作正常。有誰知道爲什麼以及如何解決這個問題?

+0

異常信息是什麼?它說什麼? –

+0

錯誤:要添加的值超出範圍。參數名稱:值。堆棧跟蹤對我沒有任何幫助。它在本地工作,但不在一臺服務器上。 – Nordes

+0

什麼是'callValue'?你是否真的試圖解析「12:00:00」作爲一個數字? – fejesjoco

回答

2

我試着想答案:

  1. cellValue包含一個逗號作爲小數分隔符。所以它的值是例如 0,5833333333
  2. 用點替換逗號=>0.5833333 -
  3. 將此轉換爲法語服務器上的雙精度表顯示爲58333333333
  4. 將此添加到日期會產生異常。

您的軟件不會指望'.'作爲小數點分隔符,而是在目標系統上配置任何內容。只要excel源碼保留在同一臺計算機上,就不必交換任何內容。

另外,它是真的和XLS格式或你在談論CSV?如果您的數據來自以CSV格式導出的法語EXCEL,則最終會得到使用逗號格式化的小數值。現在你在你的本地電腦上檢查你的軟件(它有我猜的美國文化),並且你添加了代碼來替換逗號。哇,它現在可以在你的電腦上運行!但不要指望相同的代碼在另一臺機器上工作。

您必須手動解析十進制值,或者僅僅依靠數據源(您的EXCEL數據)在與運行應用程序的計算機具有相同區域性設置的計算機上格式化。

一個猜測爲什麼值小於12:00工作:可能是意外。如果您檢查06:00它將是0,25作爲十進制並轉換爲25這是完全沒問題的(當然,它不會引發異常)。

請不要忘記:這只是一個猜測,因爲我們還沒有看到所有相關信息。

+0

我會研究一下。 我只是做了「double cellValueAsDouble = double.Parse(cellValue.Replace(」。「,」,「),_frenchTouch);」。我需要等待部署 – Nordes