以 MM/YYYY 格式获取日期之间的所有月份
本文关键字:之间 取日期 MM YYYY 格式 获取 | 更新日期: 2023-09-27 18:33:50
我想在两个给定日期之间以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()));
}
}
提前感谢您的帮助。
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)
。
(就个人而言,我更愿意在输出中包含起始月份,但这不是您要求的。
开始日期的日值可能大于结束日期的日值。在这种情况下,有必要将结束日期规范化到月底
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);
}
您可以使用
DateTime.AddMonths
方法for
月份值递增的循环;
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
.
你可以使用这段代码,它更优雅:
for (DateTime date = StartDate; date <= EndDate; date = date.AddMonths(1))
Console.WriteLine(date.ToString("MM/yyyy"));
没有测试,但像这样的事情怎么样:
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))
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 />");
}