2012-11-25 26 views
1

我有一個看起來像下面的代碼在運行良好PC中的代碼:嚴格或類似選項日期時間解析

DateTime.Parse("10/10/2012"); 

我複製它到其他機器,它說的東西歸咎於日期轉換是錯誤的。 我該怎麼做才能解決它是使用:

DateTime.TryParseExact("10/10/2012", "dd/MM/yyyy", null); 

有誰知道是否有在C#中的任何配置或控制本這樣的事情的機器? (或者它可能是兩臺計算機上的.net版本不同,但我確定它們在兩臺計算機上都是相同的,因爲兩臺計算機都使用了Visual Studio 2008)。

我說的是windows本身的全局配置,這使得我的程序有一些嚴格的例外。任何人都知道這件事?

+0

檢查Windows系統的區域和語言設置。 –

回答

0

的差異來自世界寫的CultureInfo.CurrentCulture。不同的零件日期用不同的方式。

即使說ParseExact("10/10/2012", "dd/MM/yyyy", null)可能會有問題。你有沒有試過先設定

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK"); 

然後再做ParseExact?它會失敗,因爲在這種文化中DateSeparator不是"/"。爲了解決這個問題,要麼說

DateTime.ParseExact("10/10/2012", @"dd\/MM\/yyyy", null) 

或者說

DateTime.ParseExact("10/10/2012", "dd/MM/yyyy", CultureInfo.InvariantCulture) 

第一個作品「逃離」的斜槓/所以它變成文字斜線和未轉換爲當前DateSeparator。第二個是通過給我們知道DateSeparator確實是"/"的不變文化。

增加:

如果你從未在你的代碼CurrentCulture,它的值取決於區域和語言設置您的操作系統。我想你正在運行Windows?細節可能取決於確切的Windows版本。

0

解析日期時使用系統的當前文化。我敢打賭,這兩臺機器有不同的文化。

0

如果您的輸入始終是相同的(例如en-us格式),並且您希望從用戶日期&抽象時間格式首選項,那麼DateTime.TryParseExact是一個很好的正確途徑。

+0

問題是它正在竊聽我的其他程序(我有另一個代碼將一個可爲空的int傳遞給一個函數,並且在有問題的機器中它表示無效指定的參數轉換,而它在良好的機器中工作正常)。如果你知道的話,我可能會在這裏查看特定的機器配置。感謝回覆 –

+0

@ Chris'o:輸入的來源或性質是什麼? – abatishchev

+0

日期的文本文件,以及函數的可爲null的參數是數據庫結果集。按門鈴? –

0

你可以試試這個設置文化不變的日期時間: - (你是混合ParseExactTryParseExact

using System.Globalization; 
//... 
DateTime _datetime = DateTime.Now; 
string _formattedDateTime = _datetime.ToUniversalTime().ToString("s", 
DateTimeFormatInfo.InvariantInfo) + "Z"; 
+0

只需使用'u',而不需要花哨的字符串連接。 – abatishchev