保存到数据库时日期值被更改

时间:2019-09-18 03:32:17

标签: c# sql-server date datetime entity-framework-core

我使用实体框架核心将两个日期时间变量保存到SQL数据库(托管在Azure中)表中。保存后以某种方式查询数据库时,我注意到datetime值已更改。您可以在下面保存之前看到初始值。

Code with values pinned

保存后,它在数据库中显示如下

SQL Table values

我通读了一些技术文档,以查找可能影响此操作的因素。不过,我没有发现任何有趣的东西。

能否请您帮助我了解此数据更改的原因?我很确定没有任何存储过程或任何其他脚本可以更改这些日期。

// step 3: update tblStudent
var tblStudentEntityToUpdate = await _applicationDbContext.Value.StudentApplications.FirstOrDefaultAsync(x => x.StudentID == vm.StudentID);
vm.GuardianID = guardianId;

_applicationDbContext.Value.Entry(tblStudentEntityToUpdate).CurrentValues.SetValues(vm);
await _applicationDbContext.Value.SaveChangesAsync();

1 个答案:

答案 0 :(得分:0)

正如zaitsman在评论中提到的那样,原因是您正在使用本地格式的DateTime。无论选择哪个数据中心位置,您的SQL Azure服务器都设置为UTC时区。 AFAIK,无法更改。

始终建议将DateTimes存储为UTC,因为这样可以避免在本地时间写入数据,然后在不同时区假设的情况下读取数据的问题。

据我了解,您的应用程序应该可以正常工作,因为您的应用程序将读取这些值并将其正确存储为UTC DateTimes,如果您想在特定时区显示此信息,则可以调用DateTime.ToLocalTime。