Convert.ToDateTime() error

本文关键字:error ToDateTime Convert | 更新日期: 2023-09-27 18:13:49

尝试将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);
    

结果如下:

字符串未被识别为有效的日期时间。

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

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

这在我以前的设置中确实工作得很好,任何想法为什么它不再工作?

编辑:我相信这个问题不是问题的副本转换字符串到日期时间,托马斯韦勒链接到。由于此问题是预期行为变化的结果,请参见第二个示例。我也找到了一个修复这个,但它是不实际的:

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

Convert.ToDateTime() error

由于控制面板上的区域设置,这可能不再工作。

为避免与目标环境中的区域设置冲突,请使用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的DateTime也将使用当前区域性(在MSDN上检查这些引用)。

我的最后一个建议是,你可以这样做,而不是做替换,

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

我试着在控制台应用程序中遵循代码,它对我有效。点击这里的。net fiddle

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 objl = new CultureInfo("en-GB");

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