我希望在两个给定日期之间以格式MM/YYYY
获得年份的所有月份。
这样的事情:
Start date: 08/1/2012
End date: 03/1/2013
结果:
09/2012
10/2012
11/2012
12/2012
01/2013
02/2013
03/2013
这是我的代码,但它无法正常工作。
for (int i = StartDate.Year; i <= EndDate.Year; i++)
{
for (int j = StartDate.Month+1; j <= 12 ; j++)
{
Console.WriteLine(j.ToString("00") + "/" + i.ToString()));
}
}
提前感谢您的帮助。
答案 0 :(得分:4)
for
(
DateTime date = new DateTime(2012, 08, 01).AddMonths(1);
date <= new DateTime(2013, 03, 01);
date = date.AddMonths(1)
)
{
Console.WriteLine(date.ToString("MM/yyyy"));
}
如果您为日期编写单独的枚举器,这将更具可读性和可靠性,如下所示:
public static IEnumerable<DateTime> MonthsBetween(int startMonth, int startYear, int endMonth, int endYear)
{
for
(
DateTime date = new DateTime(startYear, startMonth, 01).AddMonths(1);
date <= new DateTime(endYear, endMonth, 01);
date = date.AddMonths(1)
)
{
yield return date;
}
}
您可以这样打电话:
foreach (var date in MonthsBetween(08, 2012, 03, 2013))
{
Console.WriteLine(date.ToString("MM/yyyy"));
}
请注意,此范围不包括第一个月,从您的示例中可能看起来是您想要的。
如果您不想跳过第一个月,请从创建开始日期的行中删除.AddMonths(1)
。
(就个人而言,我更喜欢在输出中包含起始月份,但这不是你要求的。)
答案 1 :(得分:1)
您可for
使用DateTime.AddMonths
方法(例如
DateTime dt1 = new DateTime(2012, 08, 01);
DateTime dt2 = new DateTime(2013, 03, 01);
DateTime dt3 = new DateTime();
for (dt3 = dt1.AddMonths(1); dt3 <= dt2; dt3 = dt3.AddMonths(1))
{
Console.WriteLine(dt3.ToString("MM/yyyy"));
}
输出将是;
09.2012
10.2012
11.2012
12.2012
01.2013
02.2013
03.2013
这里有 DEMO
。
答案 2 :(得分:1)
您的startdate的日期值可能大于enddate的日期值。在这种情况下,有必要将结束日期标准化为月末
List<string> result = new List<string>();
DateTime startDate = new DateTime(2012, 1, 8);
DateTime endDate = new DateTime(2013, 1, 3);
DateTime temp = startDate;
endDate = new DateTime (endDate.Year, endDate.Month, DateTime.DaysInMonth(endDate.Year,endDate.Month));
while (temp <= endDate)
{
Console.WriteLine((string.Format("{0}/{1}", temp.Month, temp.Year));
temp = temp.AddMonth(1);
}
答案 3 :(得分:0)
你可以使用这个代码,它更优雅:
for (DateTime date = StartDate; date <= EndDate; date = date.AddMonths(1))
Console.WriteLine(date.ToString("MM/yyyy"));
答案 4 :(得分:0)
没有经过测试,但是这样的事情如何:
public IEnumerable<String> EachMonth(DateTime start, DateTime end)
{
for(var m = start.Date; m.Date <= end.Date; m = m.AddMonths(1))
yield return m.ToString("MM/YYYY");
}
然后你可以像这样使用它:
foreach (String month in EachMonth(StartDate, EndDate))
答案 5 :(得分:0)
DateTime StartDate = Convert.ToDateTime("08/1/2012");
DateTime EndDate = Convert.ToDateTime("03/1/2013");
for (DateTime i = StartDate; i <= EndDate; i = i.AddMonths(1))
{
Response.Write(i.ToString("MM") + "/" + i.ToString("yyyy")+"<br />");
}