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

本文关键字:电脑 意外 ToString 格式 DateTime | 更新日期: 2023-09-27 18:06:16

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

实际代码是CCD_ 2,其中DP是DateTimePicker控件。

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

罪魁祸首可能是什么?两台电脑都安装了SQLServer2008R2(和相同的排序规则(和.NETFramework4.0客户端配置文件。我看到的一个区别是,我的SQLServer具有英语(美国(语言属性,而另一个则设置了意大利语,但我本应该用字符串格式来克服它。。。

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

您没有指定区域性,因此正在使用当前区域性。在另一个系统上,"."用于时间说明符,而不是":"。

但是,为了避免这种情况,您可以显式指定区域性:

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

也就是说,使用参数化查询并将值保持为DateTime比将日期作为字符串传递要好。

罪魁祸首可能是什么?

用户的区域性设置。

有些培养基使用.,有些使用:作为时间分隔符。

解决方案?

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

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