在最近的项目中, 有个关于时间的功能。一个请假的时间。前端选择的时候只有日期。所以比如请一天假就是选2017-8-15和2017-8-15,这样算请这一天的假。但是后台存入数据库时我不能就存2017-8-15 00:00:00和2017-8-15 00:00:00。这样区分不出时间。

我打算一个就存2017-8-15 00:00:00。另一个就2017-8-15 23:59:59这样子。这样子存进数据库。其他地方判断时才能确定是否在这个时间段内。

然后我就去百度了,直接找到这个代码,觉得很合理就上了

toDate = toDate.Date.AddDays().AddMilliseconds(-);

就是加一天嘛,然后减去1毫秒
C#中看时间也成功变成

{-- ::}

相当棒,直接就上,但是发现存进数据库里,时间变成了

{-- ::}

发现,datetime类型的时间精度是3.33毫秒,超过该精度会进行近似到0.000,0.003,0.007 秒

所以存到SQL Server的时候被round到了2017/8/16 00:00:000000

解决方法:
1、sqlserver DateTime换成datetime2类型(SQL Server 2008及以上版本才有),这样C# 的时间精度就和DateTime2的时间精度相同了
2、我们也别减1毫秒了、减1秒吧。这里把AddMilliseconds改成AddSecond(-1)减1s好了。

PS.附上我参考的文章,其实我也是找啊找才知道这个原因的
http://www.cnblogs.com/yangecnu/p/Difference-between-DotNet-DateTime-and-SQLServer-datetime.html

C# DateTime类型和sqlserver DateTime精度不同的更多相关文章

  1. DATETIME类型和BIGINT 类型互相转换

    项目中使用BIGINT来存放时间,以下代码用来转换时间类型和BIGINT类型 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ========= ...

  2. msyql DATETIME类型和Timestamp之间的转换

    DATETIME -> Timestamp: UNIX_TIMESTAMP(...) Timestamp -> DATETIME: FROM_UNIXTIME(...) select da ...

  3. 【2017-2-26】C#String类、Math类、DateTime类

    String类 黑色小扳手:属性      后面不带括号 紫色小箱子:方法      后面带小括号 1.字符串.Length;   字符串长度,返回int类型 字符串的长度 2.字符串.TrimSta ...

  4. 'datetime.datetime' has no attribute 'datetime'问题

    写python时,用到了日期计算.于是写了datetime.datetime(*d_startTime[0:6])这样的代码. 结果编译不通过,报 'datetime.datetime' has no ...

  5. oracle数据库date类型和mysql数据库datetime类型匹配

    oracle数据库有date类型,但是没有datetime类型 mysql数据库既有date类型也有datetime类型. Oracle数据库的date类型和mysql的date类型是不一样的,Ora ...

  6. [django]date类型和datetime类型过滤

    搞清楚datetime.datetime和datetime.date模块 他们两个的格式区别 datetime模块 In [1]: from datetime import datetime In [ ...

  7. C#string类;math类;datetime类

    String类: .Length字符的长度   .Trim()去掉开头以及结尾的空格 .TrimStart()去掉字符串开头的空格 .TrimEnd()去掉字符串后面的空格   .ToUpper()全 ...

  8. string、math、random、datetime类

    1.string类 变量.Replace("想要替换掉的字符或字符串","转换后的字符或字符串");//替换 练习:判断邮箱格式是否正确            ...

  9. 当碰到unix纪元问题时strtotime怎么转时间戳(DateTime类的使用方法)

    UNIX纪元时间又称POSIX时间/新纪元时间(Epoch Time):从协调世界时1970年1月1日0时0分0秒起到现在的总秒数,不包括闰秒.正值表示1970以後,负值则表示1970年以前. Uni ...

随机推荐

  1. django系列8.3--django中间件实现登录验证(1)

    中间件版的登录验证需要依靠session,所以数据库中要有django_session表. urls.py from django.conf.urls import url from app01 im ...

  2. Linux基础实验(二)

    一)基础实验: 1. 新建文件a.txt,并用权限模式.权限值两种方式修改权限为rwxrwx--x     新建文件:touch a.txt    权限模式:chmod ug=rwx o=x a.tx ...

  3. Remoteland HDU - 4196

    题意: 给出一个n,在[1, n] 中挑选几个不同的数相乘,求能的到的最大完全平方数 解析: 最大的肯定是n!, 然后n!不一定是完全平方数 (我们知道一个完全平方数,质因子分解后,所有质因子的质数均 ...

  4. 486. Predict the Winner

    Given an array of scores that are non-negative integers. Player 1 picks one of the numbers from eith ...

  5. PHP之编写日志文件留后门(免杀)

    (我知道你们都喜欢干货,所以也没亏待你们,请到文末吧,成果附件已上传~) 本文原创作者:Laimooc(原名xoanHn) 鄙人宗旨: 本人秉着爱学习爱恶搞爱研究爱进步并且遵纪守法的心态写下这篇文章, ...

  6. 逻辑卷磁盘管理和dd命令

      底层PV 中层VG 上层LV   PE(phsical extent):在逻辑层次上,VG把PV分成固定大小的块,这些块就叫PE,默认为4M ,创建LV的过程就是分多少个PE的过程. 自动分区的过 ...

  7. 利用python 学习数据分析 (学习三)

    内容学习自: Python for Data Analysis, 2nd Edition         就是这本 纯英文学的很累,对不对取决于百度翻译了 前情提要: 各种方法贴: https://w ...

  8. Java_日志接口实现

    日志的接口实现:改用slf4j实现日志功能 为什么要使用slf4j,而不是用log4j或者其他日志框架? 因为slf4j只是规定了一堆实现了日志的接口,并不关心日志怎么实现,这样就可以让项目脱离对日志 ...

  9. shiro原理及其运行流程介绍

    shiro原理及其运行流程介绍 认证执行流程 1.通过ini配置文件创建securityManager 2.调用subject.login方法主体提交认证,提交的token 3.securityMan ...

  10. 'qt_sql_default_connection' is still in use

    出现这个告警是因为打开了多个db而没有及时关闭,网上搜了答案是使用完了执行 QSqlDatabase::removeDatabase(m_connectionName); 泄漏的问题有所改善,但点快了 ...