最近开发的过程中遇到一种情况,在.net 程序中获取的Datetime格式的时间,在存入SQL server中,毫秒部分丢失。
这个是个很奇怪的状况,因为在Debug的时候,Datetime的变量的确是拥有毫秒信息的。但是在插入数据库以后,毫秒的信息缺不见了。
后来找到了微软官方的介绍,Datetime在向SQL server 插入数据时,毫秒级别的数据会丢失。
这就造成了很麻烦的问题,必须要在插入数据库之前,手动把日期转换为带有毫秒的字符串才行。
因为要把DateTime.Now换为DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff");
原本在实体类定义的Datetime的字段,就要变为String。
SQL server 端的日期存储是Datetime格式的,String类型的字符串只要符合格式都可以顺利插入。
不过Nhibernate这边,数据库格式与映射文件格式不同,暂时不知道是否有影响。
此外,由于我的疏忽,第一次修改的时候
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff");
被我写成了DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss:fff");
原本我只知道时间转换月份和分钟因为都是m,所以要区分大小写MM和mm
但是小时一直都没留意,HH和hh也是有区别的。
HH表示格式化后的时间为24小时进制,而hh表示格式化后是12小时进制。
这个写错了,可是非常要命的事情,以后一定要注意才行。