簡體   English   中英

Convert.ToDateTime() 錯誤

[英]Convert.ToDateTime() error

嘗試將string轉換為DateTime出現錯誤,即使這以前一直有效。

這是我使用的程序:

  1. 將日期時間保存到文本文件中,如下所示:

     DateTime.Now.ToUniversalTime().ToString(); //results in something like this 20.9.2015 10.16.12
  2. 在應用程序加載時:

     string s = streamReader.ReadLine(); //the saved string s = "20.09.2015 10.16.12" DateTime d = Convert.ToDateTime(s);

這導致:

字符串未被識別為有效的 DateTime。

我在安裝 Windows 10 和 Visual Studio 2015 之前從未遇到過這個問題,我之前的設置是 Windows 7 和 Visual Studio 2013。奇怪的是,這也會導致同樣的錯誤:

DateTime d = Convert.ToDateTime(DateTime.Now.ToUniversalTime().ToString());

這在我以前的設置中確實工作得很好,有什么想法為什么它不再工作了嗎?

編輯:我確實相信這個問題不是 Thomas Weller 鏈接到的將字符串轉換為日期時間的問題的重復。 因為此問題是預期行為變化的結果,請參閱第二個示例。 我也確實找到了解決方法,但這並不實用:

    string s = DateTime.Now.ToUniversalTime().ToString(); 
    s = s.Substring(0, s.IndexOf(" ")).Replace('.', '/') + s.Substring(s.IndexOf(" ")).Replace('.', ':'); 
    DateTime d = Convert.ToDateTime(s);

由於您在控制面板上的區域設置,這可能不再起作用。

為避免與目標環境中的區域設置發生沖突,請使用DateTime.TryParseExact

string s = streamReader.ReadLine(); //the saved string s = "20.09.2015 10.16.12"
DateTime d = DateTime.Now;
DateTime.TryParseExact(s, "dd.MM.yyyy HH.mm.ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out d);

此外,如果這是您的默認格式,並且整個應用程序都需要這種格式, 您可以在配置文件中設置默認文化

這段代碼:

Convert.ToDateTime(DateTime.Now.ToUniversalTime().ToString())

一旦沒有格式提供程序的 DateTime.ToString() 和 Convert.ToDateTime() 使用相同的 DateTimeFormatInfo ,則應該適用於任何環境,除非您在這些調用之間改變了您的文化。 請注意,沒有格式說明符的 DateTime.ToString() 將使用基於當前文化的通用日期/時間模式 (G) 沒有 FormatProvider 的 Convert.DateTime 也將使用當前文化(在 MSDN 上查看這些參考資料)。

我的最后一個建議是,您可以執行以下操作,而不是進行替換:

string s = DateTime.Now.ToUniversalTime().ToString("dd/MM/yyyy HH:mm:ss");

我在控制台應用程序中嘗試了以下代碼,它對我有用。 在此處檢查 .NETFiddle

string s = "20.09.2015 10.16.12";
DateTime d;
bool isValid = DateTime.TryParseExact(s, "dd.MM.yyyy HH.mm.ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out d);

嘗試了解 TryParseExact 的工作原理。 您可以在此處閱讀有關TryParseExact和格式的信息 它返回一個true ,如果它成功地轉換值,否則返回一個false

請試試這個。

CultureInfo objcul = new CultureInfo("en-GB");

DateTime.ParseExact(ValidFrom.Text,"dd/MM/yyyy", objcul);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM