如何获得月度清单?

时间:2010-12-02 17:10:34

标签: c# date-arithmetic

我有开始日期和月数。我需要创建特定数量的月度期间,例如:

var startingDate = new DateTime(2010,1,15);
var months = 3;
for (int i = 0; i < months; i++)
 {
 Console.WriteLine("{0} from {1} to {2}", i + 1, startingDate.AddMonths(i), 
startingDate.AddMonths(i + 1).AddDays(-1));
}
OUTPUT:
1 from 2010-1-15 to 2010-2-14
2 from 2010-2-15 to 2010-3-14
3 from 2010-3-15 to 2010-4-14

在这种情况下,代码很简单,而且很有效。 但是当startDate是DateTime(2010,1,31)时,结果是:

OUTPUT:
1 from 2010-1-31 to 2010-2-27
2 from 2010-2-28 to 2010-3-30
3 from 2010-3-31 to 2010-4-29

这些时期是否正确?

2 个答案:

答案 0 :(得分:1)

这些时期看起来很时髦,但它们是正确的。

如果您的期间从该月的最后一天开始,则会在下个月的倒数第二天结束。

答案 1 :(得分:1)

你可以选择他们是对还是错。这就是我的意思: 如果您在1月15日开始,您是在本月第一天之后的14天开始,还是在最后一天之前的16天开始?

它可能变得更加棘手。如果15日是星期二,那么你的期限是否定义为某个月的第3个星期二开始?

金融界有很多关于这方面的文献,因为日计数公约,工作日,滚动公约等可以在金融产品的定价和现金流量方面产生很大的不同。与之相关。