我使用DateTime.ParseExact
将我的日期字符串值转换为Date对象。
以下是我用来将日期字符串转换为DateTime
对象的代码。
DateTime.ParseExact(“ my date string value from database ”, "dd/MM/yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture) ;
我的数据库返回一个像“25/9/2016 00:00:00”
这样的字符串值。
但是当我调试我的代码时,它不断地给我字符串是无效的字符串转换为DateTime
对象。
结束我必须将笔记本电脑的日期时间格式更改为“d / M / yyyy H:mm:ss”,以使我的数据库字符串值变为有效的字符串值。
那么我怎样才能保证我的代码在服务器上运行。这种情况的解决方案是什么?在构建我的代码之前,是否必须检查服务器日期时间格式并根据它更改格式字符串。??
答案 0 :(得分:1)
ParseExact
将失败,因为月份只是一个数字。
将格式更改为“dd / M / yyyy HH:mm:ss”是正确的解决方案。
但是,你不应该存储日期&数据库中的时间作为字符串,因为您将遇到这种问题。当字符串转换日期发生时,其中一个主要原因是不同的设置。主要是日 - 月 - 月 - 月 - 日,单日对比和日和月的两位数。此外,如果您要转换为本地时间而不是UTC,那么如果您有不同时区的用户,则数据库中的事件将无序显示。
如果你真的必须有字符串,那么你可以使用ParseExact
的重载,该重载采用一系列允许的格式,以便你可以处理多种格式,如该页面中的示例所示:
string[] formats= {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt",
"MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss",
"M/d/yyyy hh:mm tt", "M/d/yyyy hh tt",
"M/d/yyyy h:mm", "M/d/yyyy h:mm",
"MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm",
"MM/d/yyyy HH:mm:ss.ffffff" };
string[] dateStrings = {"5/1/2009 6:32 PM", "05/01/2009 6:32:05 PM",
"5/1/2009 6:32:00", "05/01/2009 06:32",
"05/01/2009 06:32:00 PM", "05/01/2009 06:32:00",
"08/28/2015 16:17:39.125", "08/28/2015 16:17:39.125000" };
DateTime dateValue;
foreach (string dateString in dateStrings)
{
try {
dateValue = DateTime.ParseExact(dateString, formats,
new CultureInfo("en-US"),
DateTimeStyles.None);
Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
}
catch (FormatException) {
Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
}
}