关于DateTime在远程服务器使用以及日期与时间格式的问题

昨天睡觉前鑫哥心情好开了半个小时的门放入了无数苍蝇蚊子结果直接导致原本就轻微神经衰弱的我严重失眠...翻来覆去乱七八糟心事还多干脆直接起床把CRM Protype完成。于是,凌晨2点,新的一天开始了....

天有不测风云,鬼知道(寝室的鬼说:我也不知道啊?....:)怎么原先运行好好的程序在调整了下结构与加入几条注释后就出错了....下面是整个问题的解决流程,绝对是血的教训,在此备案将来引以为鉴。

问题描述:
原先一直正常使用的ACT CRM Protype在今天优化了代码之后突然不好用了,提示"The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value."但问题是代码优化没有修改业务逻辑与实现,只是针对结构的调整,本地调试没有问题,但是上传却怎么也调试不过,而之前一天在服务器还好好的运行。

解决过程:
out-of-range datetime 是超出时间范围但明显我输入的时间没有超出范围....显然是文本日期数据转换为SQL Server识别的日期进行插入这步出错,开始怀疑是优化过程不小心修改了函数或者参数传递问题但本地为什么能通过呢?百思不得其解。

经过两个多小时调试跟踪了所有有关日期的变量,总算发现将DATEMODIFY设置为固定值01.01.1900是可以正确添加的,问题进一步缩小为生成当前日期的值上,于是跟踪之,突然发现用DateTime.Now.ToLocalTime().ToString()得到的服务器端运行时间是13.05.2007 22:46:00<==注意这里的13
查看以前的记录发现数据中有05.12.2007格式的2007年5月12日添加的数据,总算找到了问题所在:这里的13是月而本地执行得到的格式是 05.13.2007 22:46:00,这是由于远程服务器(在法国)时间环境不同造成的,因为13大于12月所以提示out-of-range datetime。于是将DateTime.Now.ToLocalTime().ToString()换为DateTime.Now.ToString("MM.dd.yyyy HH:mm:ss")来强制约束日期输出格式,果然问题得到解决:)

这里还有个值得警惕的地方是现在我添加的记录在服务器中是我现在添加的数据日期在服务器端(法国)由GridView显示的是13.05.2007 23:28:00而不是原本想象中的05.13.2007 23:28:00。

总结:现在本地服务器的默认输出日期格式是MM.dd.yyyy,远程服务器的默认输出日期格式是dd.MM.yyyy,而SQL Server数据库所默认需要的格式是MM.dd.yyyy,如果不强制约束格式为MM.dd.yyyy的话本地没有问题而在服务器上运行时每个月的前12天也没有问题(其实是时间记录有问题但我们发现不了)但13号就将是问题爆发日<====这才是最可怕的

于是,凌晨5点40分,总算可以回笼了...Zzzzzz 这篇BLOG写于刚刚睡醒不久....

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值