当前位置: 首页 > 编程语言 > C#

将.NETDateTime取整为毫秒,使其适合SQLServer毫秒分享

时间:2023-04-10 19:26:35 C#

SQLServer将毫秒截断为3位数字,因此我截断了毫秒。但问题是,正如您在此处看到的:从XML转换为SQLServer日期时间时的毫秒数错误。SQLServer也有精度问题。这就是您想要的:使用System.Data.SqlTypes;//来自System.Data.dllpublicstaticDateTimeRoundToSqlDateTime(DateTimedate){returnnewSqlDateTime(date).Value;有点晚了,但这里有一个解决方案,基于SQLServer文档的不同版本的SQLServer的datetime数据类型:对于任何给定的日期/时间值,这应该为您提供与SQLServer完全相同的值:publicstaticclassDateTimeExtensions{//毫秒模10:0123456789privatestaticreadonlyint[]OFFSET={0,-1,+1,0,-1,+2,+1,0,-1,+1};privatestaticreadonlyDateTimeSQL_SERVER_DATETIME_MIN=newDateTime(1753,01,01,00,00,00,000);privatestaticreadonlyDateTimeSQL_SERVER_DATETIME_MAX=newDateTime(9999,12,31,23,59,59,997);publicstaticDateTimeRoundToSqlServerDateTime(thisDateTimevalue){DateTimedt=newDateTime(value.Year,value.Month,value.Day,value.Hour,value.Minute,value.Second,value.Millisecond);int毫秒=value.Millisecond;intt=毫秒%10;int偏移量=OFFSET[t];DateTimerounded=dt.AddMilliseconds(offset);if(四舍五入的SQL_SERVER_DATETIME_MAX)thrownewArgumentOutOfRangeException("value");返回四舍五入;基于@RobSiklos解决方案构建,因为以这种方式使用SqlDateTime会导致丢失“日期”参数提供的时区信息。通过添加对DateTime.SpecifyKind的调用,找到确保时区信息在转换点一致的最佳实践:usingSystem.Data.SqlTypes;//来自System.Data.dllpublicstaticDateTimeRoundToSqlDateTime(DateTimedate){returnDateTime.SpecifyKind(newSqlDateTime(date).Value,date.Kind);这段代码应该有效:intticksInMillisecond=10000;DateTimet1=DateTime.Now;DateTimet2=newDateTime(t1.Ticks/ticksInMillisecond*ticksInMillisecond);但是考虑到SQLServer的精度,我宁愿把它截断到秒后的两位数:以上是C#学习教程:Round.NETDateTimemilliseconds,所以能装下SQLServer毫秒分享的全部内容,如果是对大家有帮助很有用,需要多了解C#学习教程,希望大家多多关注——intprecisionTicks=100000;DateTimet1=DateTime.Now;DateTimet2=newDateTime(t1.Ticks/precisionTicks*precisionTicks);本文来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: