我注意到,如果我的 C# 查询包含
(e => e.MyDateTimeData == DateTime.Now)
生成的 SQL 使用
WHERE [e].[MyDateTimeData] = GETDATE()
如果EF客户端时区与SQL Server主机SQL Server进程用户时区不同,那么这将不好。
即使客户端进程和SQL Server进程在同一台主机上运行,时区也可能不同。
我是否遗漏了什么,或者这是一个真正的问题?
我注意到,如果我的 C# 查询包含
(e => e.MyDateTimeData == DateTime.Now)
生成的 SQL 使用
WHERE [e].[MyDateTimeData] = GETDATE()
如果EF客户端时区与SQL Server主机SQL Server进程用户时区不同,那么这将不好。
即使客户端进程和SQL Server进程在同一台主机上运行,时区也可能不同。
我是否遗漏了什么,或者这是一个真正的问题?
如果您想使用客户端时间,则将其作为参数传递,如下所示:
var dt = DateTime.Now;
. . .
var q = db.SomeTable.Where(e => e.MyDateTimeData == dt)
DateTime
,而是使用DateTimeOffset
。 - Erik PhilipsDateTimeOffset.Now
解决同样的问题了吗?我打赌问题是一样的,我的意思是:我指示代码使用客户端的时钟,但它使用的是服务器的时钟。这不是时区问题,而是关于忠实度和一致性的问题。请参见@David Browne的答案,他和我应该做完全相同的事情。除了以上所有内容之外,建议使用DateTimeOffset,但这与问题无关。 - g.pickardou.Now
无关。我的评论不是关于主题的,也不需要评论与主题相关。 - Erik Philips