我的 c# 程序从数据库中选择一个日期时间字段并返回如下数据:
21/06/2012 4:11:48 p.m.
它不是以这种方式存储的(它的存储时间类似于 2012/06/21 15:19:10:000)。我的语言环境设置为英语/新西兰
但是当我尝试将其保存回数据库时
ISDATE()
sql 函数不喜欢这种格式,只返回 NULL 。我有任何选项可以在 sql 或 c# 中设置时间格式吗?在 sql 或 c# 中是什么让它放“pm”?(而不仅仅是“PM”,顺便说一句)
总结问题
我的 c# 程序从数据库中选择一个日期时间字段并返回如下数据:
21/06/2012 4:11:48 p.m.
它不是以这种方式存储的(它的存储时间类似于 2012/06/21 15:19:10:000)。我的语言环境设置为英语/新西兰
但是当我尝试将其保存回数据库时
ISDATE()
sql 函数不喜欢这种格式,只返回 NULL 。我有任何选项可以在 sql 或 c# 中设置时间格式吗?在 sql 或 c# 中是什么让它放“pm”?(而不仅仅是“PM”,顺便说一句)
总结问题
您根本不应该将它作为文本保存在数据库中 - 您应该使用相关的数据类型,例如DATETIME
,并DateTime
使用 SQL 参数将值从 .NET 传递到数据库。如果您使用正确的数据类型,则该值实际上根本不会存储为“2012/06/21 15:19:10:000”。这可能是您在 SQL Server Studio 或类似的东西中看到它的方式,但这并不意味着它是原始存储格式。
从逻辑上讲,日期/时间的格式不超过数字十是“10”(十进制)与“A”(十六进制)。尽可能避免字符串转换,你的生活会更轻松。
注意:请参阅 Jon 关于在数据库中正确保存 DateTime 而不是字符串的回复。
对于 C# 字符串格式:
DateTime 对象可以使用 .ToString() 函数以不同的格式输出。
请查看以下链接
因此,例如:
DateTime.Now.ToString("dd/MM/yyyy h:mm:ss");
这将以您在问题中的格式输出。
我认为您的问题与 sql 中的 Set language 设置有关。
类似于这个问题:SQL Server ISDATE() 函数 - 有人可以解释一下吗?
您可以尝试设置您的 sql 语言以匹配您的格式吗?
大多数 SQL 日期时间格式应该可以被 C# 识别DateTime.Parse(youSQLDatetimeVariable)
。我觉得你的情况有点奇怪。
就像其他人说的那样,您确实不应该这样做,但这里是如何将 DateTime 转换为各种格式的方法:
SELECT Convert(VARCHAR, MyDateTimeField, 112) from MyTable
该数字 (112) 表示将显示为 Varchar 的 DateTime 格式所有格式都可以在这里找到详细信息: http: //anubhavg.wordpress.com/2009/06/11/how-to-format-datetime-date-in -sql-server-2005/
或者在你的 C# 代码中
YourDatetimeVariable.ToString("MM-dd-yyyy")
或者在那些引号中您想要的任何格式,其中 MM- 月数,dd - 天数,yyyy - 年。