如何在保存到SQL Server时去除TimeSpan的秒和毫秒?
解决SQL Server存储TimeSpan时去除秒和毫秒的问题
你当前用的DisplayFormat特性只负责UI显示格式化,不会改变实际存储的TimeSpan值,所以数据库里还是会保留秒和毫秒。要在后端处理并修改存储的数值,得通过属性的getter和setter截断TimeSpan的秒和毫秒部分。
具体实现
把原来的自动属性改成带私有后备字段的属性,在setter里对传入的TimeSpan做处理,只保留小时和分钟,将秒和毫秒清零:
private TimeSpan _time; [Column(TypeName = "time")] [DisplayFormat(DataFormatString = @"{0:hh\:mm}")] public TimeSpan Time { get => _time; set { // 提取小时和分钟,将秒设为0(毫秒自动为0) _time = new TimeSpan(value.Hours, value.Minutes, 0); // 也可以用这种写法:通过取整总分钟数生成新的TimeSpan // _time = TimeSpan.FromMinutes(Math.Floor(value.TotalMinutes)); } }
效果说明
当给Time属性赋值时(比如前端传入的"12:30"解析成TimeSpan后),setter会自动把秒和毫秒部分清零。最终存到SQL Server里的值会是12:30:00.0000000,也就是仅保留到分钟的有效格式,读取时也不会带多余的秒和毫秒。
内容的提问来源于stack exchange,提问作者Zohidbek Abduqodir
相关产品推荐
相关产品推荐

