DateTime.ToString(格式)在不同的PC上的意外行为

时间:2013-03-27 21:14:36

标签: c# sql-server .net-4.0

那里。 我正在开发一个简单的接口来从SQLServer获取数据,我使用函数DateTime.ToString(String)

实际代码为DP.Value.ToString("yyyy-MM-dd HH:mm:00"), 其中DP是DateTimePicker控件。

我在自己的笔记本电脑上测试时一切正常。但是当我在另一台PC上移动编译的代码时,结果是不同的。 例如:它从2013-03-27 22:02传递到2013-03-27 22.02,取代了'。'在一小时内用':'。 但这足以使我的应用程序崩溃,因为SQLServer会生成无效日期。

可能是罪魁祸首? 两台PC都安装了SQLServer 2008 R2(和相同的排序规则)和.NET Framework 4.0 Client Profile。 我看到的一个区别是我的SQLServer有英语(美国)语言属性,而另一个有意大利语设置,但我应该用格式字符串克服它......

2 个答案:

答案 0 :(得分:3)

您没有指定文化,因此正在使用当前的文化。在另一个系统上,“。”用于时间说明符,而不是“:”。

但是,您可以specify a culture explicitly来避免这种情况:

var str = DP.Value.ToString("yyyy-MM-dd HH:mm:00", CultureInfo.InvariantCulture);

话虽这么说,使用参数化查询并将值保持为DateTime比将日期作为字符串传递更好。

答案 1 :(得分:2)

  

可能是罪魁祸首?

用户的文化设置。

有些文化使用.,有些:用于时间分隔符。

解?

使用CultureInfo.InvariantCulture(或选定的CultureInfo)确保一致性:

DP.Value.ToString("yyyy-MM-dd HH:mm:00", CultureInfo.InvariantCulture)