栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

C# DateTime类型与数据库的DateTime类型解惑篇

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C# DateTime类型与数据库的DateTime类型解惑篇

之前的一篇文章:C# DateTime类型保存到MySql数据库会四舍五入

实验一:

c#代码:

using (MESDB db = new MESDB())
                    {
                        var repair = new MesRepair()
                        {
                            F_ID = Guid.NewGuid().ToString(),
                            MachineNum = "666",
                            RepairEndTime = DateTime.Now,

                        };
                        var tempRepairEndTimeList = new List();
                        tempRepairEndTimeList.Add(repair.RepairEndTime.Value);
                        new StackRedisHelper().HashSet(
                            RedisCustomKey.TCPS_RealTimeMachineInfo + "666", "RepairEndTimeList",
                            tempRepairEndTimeList);
                        db.MesRepair.Add(repair);
                        db.SaveChanges();
                        }

如果SQLServer数据库设置为DateTime类型,C#代码中打断点可以看到 TimeOfDay 为

2021/07/29 14:32:34.5821524,则值会变成 2021/07/29 14.32.34.583。

 using (MESDB db = new MESDB())
                {
 				var repair = new MesRepair()
                    {
                        F_ID = Guid.NewGuid().ToString(),
                        MachineNum = "666",
                        RepairEndTime = Convert.ToDateTime("2021/07/29 14:32:34.5839524"),
                    };
                      db.MesRepair.Add(repair);
                    db.SaveChanges();
                    }

2021/07/29 14:32:34.5839524,则值会变成 2021/07/29 14.32.34.583。

这是因为:
SQLServer DateTime字段类型对应的时间格式是 yyyy-MM-dd HH:mm:ss.fff ,3个f,精确到千分之三秒,示例 2014-12-03 17:06:15.433 。(9、0、1) 会引起进0调整;(5、6、7、8)引起7调整;(2、3、4)引起3调整。

实验二:

C#代码:

using (MESDB db = new MESDB())
{
    var repair = new MesRepair()
    {
        F_ID = Guid.NewGuid().ToString(),
        MachineNum = "666",
        RepairEndTime = Convert.ToDateTime("2021/07/29 14:32:34.5821524"),

    };
    var tempRepairEndTimeList = new List();
    tempRepairEndTimeList.Add(repair.RepairEndTime.Value);
    new StackRedisHelper().HashSet(
        RedisCustomKey.TCPS_RealTimeMachineInfo + "666", "RepairEndTimeList",
        tempRepairEndTimeList);
    db.MesRepair.Add(repair);
    db.SaveChanges();
}

如果SQLServer数据库设置为DateTime2类型,长度设为0,则值会变成14.32.35。
由实验二得出结论,C# DateTime类型保存到SqlServer数据库会四舍五入。

实验三:

c#代码不变。

如果SQLServer数据库设置为DateTime2类型,长度设为7,则值会变成14.32.34:5821524。

由实验三得出结论,C#DateTime类型其实精度为秒单位后7位。

实验四:

测试下在C#中输出的话DateTime类型的数值?

C#代码:

using (MESDB db = new MESDB())
                {
                    var repair = new MesRepair()
                    {
                        F_ID = Guid.NewGuid().ToString(),
                        MachineNum = "666",
                        RepairEndTime = Convert.ToDateTime("2021/07/29 14:32:34.5821524"),

                    };

                    if (repair.RepairEndTime == Convert.ToDateTime("2021/07/29 14:32:34"))
                    {
                        Console.WriteLine("DateTime类型秒单位后7位不相同的情况下,相等");
                    }

                    if (repair.RepairEndTime.ToString() == "2021/7/29 14:32:34")
                    {
                        Console.WriteLine("DateTime类型秒单位后7位不相同的情况下,再ToString()相等");
                    }

                    var tempRepairEndTimeList = new List();
                    tempRepairEndTimeList.Add(repair.RepairEndTime.Value);
                    new StackRedisHelper().HashSet(
                        RedisCustomKey.TCPS_RealTimeMachineInfo + "666", "RepairEndTimeList",
                        tempRepairEndTimeList);
                    db.MesRepair.Add(repair);
                    db.SaveChanges();
                    }

VS编辑器调试如下:

由实验四得出结论:
c# DateTime类型在比较是否相等时候是会考虑秒单位后七位的。 而如果c# DateTime类型ToString()以后输出秒单位之前的,也不存在四舍五入。

某些业务场景需要用SQLSever存储DateTime类型字段的值的时候,后面需要取出DateTime类型字段的值与之前的DateTime类型字段的值是否相等的时候。因为DateTime类型保存到SqlServer数据库会四舍五入,就要把DateTime类型字段的值只截取到秒,秒后面的舍弃掉,存入到SqlServer数据库。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1023477.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号