Convert.ToDateTime()错误

时间:2015-09-20 10:31:43

标签: c# datetime

尝试将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);
    
  3. 结果如下:

      

    字符串未被识别为有效的DateTime。

    在安装Windows 10和Visual Studio 2015之前,我从未遇到过这个问题,我之前的设置是Windows 7和Visual Studio 2013.奇怪的是,这也会导致同样的错误:

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

    这在我之前的设置中完美运行,任何想法为什么它不再起作用了?

    编辑:我确实认为这个问题与Thomas Weller链接到的将字符串转换为DateTime的问题不重复。由于此问题是预期行为更改的结果,请参阅第二个示例。我也确实找到了解决方法,但这不实用:

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

3 个答案:

答案 0 :(得分:3)

由于您在控制面板上进行区域设置,这可能不再有效。

为避免与目标环境中的区域设置发生冲突,请使用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);

另外,如果这是您的默认格式,并且整个应用程序需要此格式,you can set the default culture on your config file

此代码:

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

一旦没有格式提供者的DateTime.ToString()和Convert.ToDateTime()使用相同的DateTimeFormatInfo,除非您在这些调用之间更改文化,否则应该适用于任何环境。请注意,没有格式说明符will use General date/time pattern (G)的DateTime.ToString()基于current culture。和Convert.DateTime没有FormatProvider will use current culture too(在MSDN上检查这些引用)。

我的最后一个建议是,您可以这样做:

,而不是替换
string s = DateTime.Now.ToUniversalTime().ToString("dd/MM/yyyy HH:mm:ss");

答案 1 :(得分:1)

我尝试在控制台应用程序中使用代码,它对我有用。并检查.NETFiddle here

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和格式here。如果成功转换值,则返回true,否则返回false

答案 2 :(得分:0)

请试试这个。

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

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