You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8.0 C#中如何正确转换DateTime到DateOnly并比较值?

.NET 8.0中DateTime转DateOnly的正确方式

场景说明

需要对比数据库表中DateOnly类型的PidDate字段与指定日期,筛选后按Id排序展示数据。

正确转换方式

在.NET 8.0里,将DateTime转为DateOnly的标准且推荐的方式就是使用DateOnly.FromDateTime()方法,你代码里的写法本身是语法正确的:

DateOnly.FromDateTime(DateTime.UtcNow.AddDays(i))

但需要注意时区匹配问题,这是容易踩坑的点:

  • 如果数据库中PidDate存储的是UTC日期,使用DateTime.UtcNow转换是正确的;
  • 如果PidDate存储的是本地时区日期,直接用UtcNow可能导致日期偏差(比如东八区的本地日期比UTC早一天),这时候应该改用本地时间转换:
    DateOnly.FromDateTime(DateTime.Now.AddDays(i))
    
    或者更严谨地指定时区转换:
    var localDateTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.Local);
    DateOnly targetDate = DateOnly.FromDateTime(localDateTime.AddDays(i));
    

额外注意

.NET 8的EF Core对DateOnly的LINQ查询支持已经很完善,你在代码中直接在Where条件里使用DateOnly.FromDateTime(),EF Core会正确将其解析为对应的SQL日期查询,不会触发客户端求值(前提是使用的数据库支持DateOnly类型,比如SQL Server 2022及以上版本、PostgreSQL等)。

内容的提问来源于stack exchange,提问作者Fillo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 09:33:13