Pra*_*tik 1 c# asp.net datetime date
我有一个接受日期范围的web服务,由于大量数据导入,我只传递了1个月的日期范围参数.
可接受的开始日期格式:1-apr-2012
可接受的结束日期格式:30-apr-2012
我想以编程方式发送每个月的过去2年的开始和结束日期,如2012年1月1日至2012年8月31日
下面是我开始测试的示例代码段,但是当我添加结束日期加上1个月时,它会给我30天的时间.
static void Main(string[] args)
{
string startDt = "1-apr-2011";
string endDt = "30-apr-2012";
DateTime dt = Convert.ToDateTime(startDt);
DateTime dt2 = Convert.ToDateTime(endDt);
CultureInfo culture = CultureInfo.GetCultureInfo("en-GB");
//Console.WriteLine(value.ToString("D", culture));
while (dt < dt2)
{
Console.WriteLine(dt.ToString("D", culture));
// Console.WriteLine(String.Format("{0:dd-MM-yyyy}", dt));
dt = dt.AddMonths(1);
}
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
更正代码:
static void Main(string[] args)
{
string startDt = "1-apr-2011";
string endDt = "30-apr-2012";
DateTime dt = Convert.ToDateTime(startDt);
DateTime dt2 = Convert.ToDateTime(endDt);
CultureInfo culture = CultureInfo.GetCultureInfo("en-GB");
while (dt < dt2)
{
DateTime dtend = new DateTime(dt.Year, dt.Month, DateTime.DaysInMonth(dt.Year, dt.Month));
Console.WriteLine(dt.ToString("D", culture));
Console.WriteLine(dtend.ToString("D", culture));
dt = dt.AddMonths(1);
}
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
每个月的第一个日期将是1,但是对于您必须使用的最后日期
int DateTime.DaysInMonth(int year, int month);
Run Code Online (Sandbox Code Playgroud)
这需要一个月,因为月份可以是28,29,30或31天,并且需要一年的闰年考虑.
添加AddMonth(1)到一个月的最后日期并不意味着它将给出下个月的最后日期.
想象这个场景
DateTime dtt = new DateTime(2012, 09, 30);
dtt = dtt.AddMonths(1);
Run Code Online (Sandbox Code Playgroud)
现在30-Sept是9月的最后一个日期,但是当我们AddMonth(1)给它们10月30日.但是10月的最后一次是31日不是30日.
所以,如果1月份的第一个日期将是
DateTime startdateofamonth = new DateTime(2011, 1, 1);
Run Code Online (Sandbox Code Playgroud)
而最后的日期将是
DateTime lastdateofamonth = new DateTime(2011, 1, DateTime.DaysInMonth(2011,1));
Run Code Online (Sandbox Code Playgroud)