[英]Convert.ToDateTime() error
尝试将string
转换为DateTime
出现错误,即使这以前一直有效。
这是我使用的程序:
将日期时间保存到文本文件中,如下所示:
DateTime.Now.ToUniversalTime().ToString(); //results in something like this 20.9.2015 10.16.12
在应用程序加载时:
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.