日期:2014-05-18  浏览次数:20375 次

一个大家值得注意的问题
Response.Write(DateTime.Now);
同样是这条代码,在不同的机器上运行有的输出的是   2001-5-26   11:36:44   上午
                                                                    有的输出的是   2001-5-26   11:36:44
看起来好像没什么区别,也都能够转换成时间型,可是当你结合sql语句运行时就有可能会出错,比如   select   *   from   table   where   time   > = '2001-5-26   11:36:44   上午 '   and   C_CALLTIME <= '2001-5-27   11:36:44   上午 '   这条sql语句就会报错:“从字符串转换为   datetime   时发生语法错误”。因为这里的时间是通过DateTime.Now产生并传入的,所以你并不容易发现错误的所在。

(开始我做的系统运行的好好的,后面因为我重装了一下XP操作系统,运行就出错了,而在服务器上又是好的,找了好久才发现是上面说的原因。)大家应该注意

我现在想问的是如何设置XP才能让Response.Write(DateTime.Now);输出的是“2001-5-26   11:36:44”而不是“2001-5-26   11:36:44   上午”   或者这是XP版本的问题?

不知我说的是否清楚,请遇到这种情况的同仁来讨论下


------解决方案--------------------
这是一个windows系统编程常识。DataTime.ToString()取桌面操作系统设置。如果你要固定输出形式,就应该自己给出Format参数,不能空着。
------解决方案--------------------
系统设置不可能一致的,格式化输出DataTime.ToString( "yyyy-MM-dd ")这样就可以了,不会影响SQL查询
------解决方案--------------------
在你新装的XP系统中打开控制面板-> 时区和语言选项,修改不同的时区,设定不同的语言,然后分别用Response.Write系统当前日期时间来看看。如果有条件的话,分别找到中文版XP和英文版XP及2003 Server试试,看有什么不同。然后在中文版和英文版中SQL Server中新建一个表,增加一个日期(Date)类型的字段,再增加一个时间(Time)类型的字段,再增加一个日期时间(DateTime)类型的字段,把当前的系统时间存入,然后打开表,看看不同。你可以看一下,SQL中存放的日期时间在什么条件下会出现“上午、下午、AM、PM”,然后你应该就知道为什么你上面提到的sql语句在迁移了系统后会出错了。如何解决,大家已经告诉你了:)
------解决方案--------------------
请查看SDK文档,说得很清楚,DateTime.ToString()的值使用从当前区域性导出的格式信息。
------解决方案--------------------
建议LZ索性一起了解一下日期的原理及表现形式,掌握相关的概念。
如:时区,UTC,长时间格式,短时间格式等等。。。
------解决方案--------------------
LZ还没理解?系统的时间显示格式是可以定制的!!!!
每个用户,都可以按自己的阅读习惯,设置相应的显示格式,具体是在控制面板中,楼上的zhrchrd(洗澡)已经说明了。
如此一来,你不管是开access还好,还是OE也好,里面的显示格式会跟着变,就好比,你改了Windows外观,窗口标题栏,由默认的蓝色变成了绿色,那所有的窗口也跟着变,是一个道理。

同样,编程语言/类库为了支持这一点,会去系统中取得当前用户指定的显示格式,并按此格式返回时间字符串,做到表现形式一致。

若你要取得固定的格式,只有自己指定显示格式,这LS已经有答案了。
------解决方案--------------------
对,这是系统的问题。要在时区和语言里设置一下。
平时用的时候应该注意一下
------解决方案--------------------
控制面板里有