关于.net DateTime 的一些事儿

时间:2023-01-17 18:35:55

最近开发的过程中遇到一种情况,在.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小时进制。

这个写错了,可是非常要命的事情,以后一定要注意才行。