首页 新闻 会员 周边 捐助

EF Core 处理时区的问题

0
悬赏园豆:50 [已解决问题] 解决于 2025-12-12 22:36

下面的查询代码

DateTime startTime = DateTime.Now.Date;
var query = ExistingPosts(blogId).Where(p => p.DatePublished >= startTime);
var count = await query.CountAsync();

对应的 EF Core 日志

2025-12-12 12:23:42.920 [Information] Executed DbCommand ("6"ms) [Parameters=["@blogId='40823', @startTime='2025-12-12T00:00:00.0000000+08:00'"], CommandType='Text', CommandTimeout='15']"
""SELECT COUNT(*)
FROM [blog_posts] AS [b]
WHERE [b].[BlogId] = @blogId AND [b].[IsExist] = CAST(1 AS bit) AND [b].[DateAdded] >= @startTime"

SQL 的 @startTime 参数被 EF Core 自动加上了时区 +08:00 ,请问如何不让 EF Core 这么干?

用的是 .NET 10

问题补充:

数据库字段是 SmallDateTime 类型,包含 +8:00 并不会影响查询

dudu的主页 dudu | 高人七级 | 园豆:24231
提问于:2025-12-12 12:55
<
分享
最佳答案
0

是我弄错了,@startTime 参数带上时区 +08:00 没有问题

dudu | 高人七级 |园豆:24231 | 2025-12-12 22:36
其他回答(2)
0

DateTime.UtcNow

或者配置DbContext的时候加一个conversion.==> DateTime.SpecifyKind(d, UTC) 改Kind到UTC.

收获园豆:30
czd890 | 园豆:14718 (专家六级) | 2025-12-12 14:05
0

说明liunx的默认时区是太平洋时区, 我都是liunx系统改成上海时区的

收获园豆:20
摇光Summer | 园豆:179 (初学一级) | 2025-12-12 19:43

容器里的 linux 系统是上海时区

支持(0) 反对(0) dudu | 园豆:24231 (高人七级) | 2025-12-12 22:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册