DateTime疑问:合并方法用AddDays替代AddMonths是否等价?
结果不一致,核心差异在这两点
月份统计的时间范围偏差:原方法用
DateTime.Now.AddMonths(day)(假设day为-1,即统计过去一个自然月),而用AddDays(30)替代的话,会忽略不同月份的天数差异:比如1月31日调用时,AddMonths(-1)指向去年12月31日,统计的是12月31日到1月31日的记录;但AddDays(-30)指向1月1日,统计的是1月1日到1月31日的记录,少了12月31日的所有数据。同理,2月28日调用时,AddMonths(-1)指向1月28日,而AddDays(-30)指向1月29日,会漏掉1月28日的记录。日统计的逻辑完全反转:原方法用
DateTime.Now.AddDays(day)(假设day为-1,即统计过去24小时内的记录),而换成AddDays(1)的话,指向的是当前时间的一天后,筛选出来的是未来的VisitDate记录,和原方法统计的历史记录完全无关,结果必然天差地别。
如果你的目标是合并两个方法,统一用AddDays来实现类似原逻辑的统计,正确的替换应该是:
- 原日逻辑(统计过去1天):用
DateTime.Now.AddDays(-1)替代原DateTime.Now.AddDays(day)(当day=-1时) - 原月逻辑(统计过去1个自然月):不能直接用固定30天,要么保留
AddMonths(-1),要么根据当前月份计算实际天数(比如DateTime.DaysInMonth(now.Year, now.Month))来动态设置AddDays的参数。
内容的提问来源于stack exchange,提问作者Goktug
相关产品推荐
相关产品推荐

