• 请不要在回答技术问题时复制粘贴 AI 生成的内容
edis0n0
V2EX  ›  程序员

EF Core 每月第一天统计出的当日订单数都比当月订单还多,是哪里出了问题?

  •  
  •   edis0n0 · Mar 2, 2023 · 1509 views
    This topic created in 1176 days ago, the information mentioned may be changed or developed.

    这个系统好几年了一直有这个 Bug ,没人修,我一下子也没看出问题,问题代码等效如下:

    var thisMonthOrder = _context.Orders.Where(x => x.CreatedAt >= DateTimeOffset.Parse($"{DateTimeOffset.Now.Month.ToString()}/1/{DateTimeOffset.Now.Year.ToString()}")).Count();
    var todayOrder = _context.Orders.Where(x => x.CreatedAt >= DateTimeOffset.Now.Date).Count();
    

    请大佬帮忙看看。

    6 replies    2023-03-02 09:33:35 +08:00
    Rocketer
        1
    Rocketer  
       Mar 2, 2023 via iPhone
    考虑一下时区问题?
    clorischan
        2
    clorischan  
       Mar 2, 2023
    那么问题来了
    哪个是对的, 本月数量是对的还是当日数量是对的
    netnr
        3
    netnr  
       Mar 2, 2023
    var now = DateTime.Now; //now = DateTime.UtcNow;
    var firstDay = now.AddDays(1 - now.Day);

    var query1 = _context.Orders.Where(x => x.CreatedAt >= now.Date);
    var query2 = _context.Orders.Where(x => x.CreatedAt >= firstDay.Date);

    可能是第一个查询转日期的问题?
    ragnaroks
        4
    ragnaroks  
       Mar 2, 2023
    DateTimeOffset.Parse 需要正确传递第 2 个参数 IFormatProvider ,如果你是使用 "MM/D/YYYY" 格式的区域就用 DateTimeFormatInfo.CurrentInfo 否则应当使用 "YYYY-MM-DD" 格式和 DateTimeFormatInfo.InvariantInfo
    ragnaroks
        5
    ragnaroks  
       Mar 2, 2023
    我最早注意到此类问题是很久以前在国内做的开源项目,老外拿去用发现数字处理非常诡异
    jatsz
        6
    jatsz  
       Mar 2, 2023
    打一个日志看下生成的 SQL
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1480 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 17:00 · PVG 01:00 · LAX 10:00 · JFK 13:00
    ♥ Do have faith in what you're doing.