这个系统好几年了一直有这个 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();
请大佬帮忙看看。
1
Rocketer 2023-03-02 00:54:36 +08:00 via iPhone
考虑一下时区问题?
|
2
clorischan 2023-03-02 01:28:42 +08:00
那么问题来了
哪个是对的, 本月数量是对的还是当日数量是对的 |
3
netnr 2023-03-02 05:56:40 +08:00
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); 可能是第一个查询转日期的问题? |
4
ragnaroks 2023-03-02 08:32:45 +08:00
DateTimeOffset.Parse 需要正确传递第 2 个参数 IFormatProvider ,如果你是使用 "MM/D/YYYY" 格式的区域就用 DateTimeFormatInfo.CurrentInfo 否则应当使用 "YYYY-MM-DD" 格式和 DateTimeFormatInfo.InvariantInfo
|
5
ragnaroks 2023-03-02 08:33:55 +08:00
我最早注意到此类问题是很久以前在国内做的开源项目,老外拿去用发现数字处理非常诡异
|
6
jatsz 2023-03-02 09:33:35 +08:00
打一个日志看下生成的 SQL
|