网上有不少人使用下面一句代码来求当前时间所在季度的始末
DateTime dt=DateTime.Now; DateTime startQuarter = dt.AddMonths(0 - (dt.Month - 1) % 3).AddDays(1 - dt.Day);
这句的确是不错,本人也直接用了这个方法,而且调试的时候没问题。
不过在昨天本人发现了它的不足,
昨天是5月31号,第二季度,第二季度的初始月份是4月,30天。
dt.AddMonths(0 – (dt.Month – 1) % 3)是4月30号,再加(1-31)天是3月31号,并不是4月1号。
除了5月31号之外,其它全部时间用这个语句都没有问题。
原因本人感觉是一年四季的四个初始月,1,4,7,10,只有4月是30天,那么遇到5月31日就出问题了
解决方案
20
这只是个执行次序问题,不能原因是好看而改变次序
DateTime startQuarter = dt.AddDays(1 - dt.Day).AddMonths(0 - (dt.Month - 1) % 3);
要先调整到当月一号,再计算季度