c#中系统时间格式与数据库返回时间字符串值格式冲突
本文关键字:时间 格式 字符串 冲突 返回 系统 数据库 | 更新日期: 2023-09-27 18:08:54
我使用DateTime.ParseExact
将我的日期字符串值转换为日期对象。
下面是我用来将日期字符串转换为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
对象。
那么我如何保证我的代码在服务器上工作。这种情况的解决方案是什么?我是否必须检查服务器日期时间格式,并根据它更改格式字符串之前构建我的代码。
ParseExact
,格式为"dd/MM/yyyy HH: MM:ss",当您给它字符串" 25/9/2016 00:00:00 "时将失败,因为月份只是一个单位数。
将格式改为"dd/M/yyyy HH:mm:ss"是正确的解决方案。
然而,你不应该存储日期&时间在你的数据库中作为字符串,你会不断遇到这种问题。其中一个主要原因是发生日期到字符串转换时的不同设置。主要的是日-月-年vs月-日-年,以及日和月的一位数vs两位数。此外,如果您正在转换为本地时间而不是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);
}
}