当前位置: 首页 > 编程语言 > C#

查找日历的第一天分享

时间:2023-04-11 11:42:25 C#

查找日历的第一天我想做的是创建一个简单的日历,我想在其中找到特定月份第一周的第一天.我的日历是星期一->星期日日历,下面的代码工作正常,但如您所见,它并不是那么好。谁能更好地了解如何在日历中获取第一个日期。varnow=newDateTime(年,月,1);现在=now.AddDays(1-(int)now.DayOfWeek);现在=现在.Day>15?现在:现在.AddDays(-7);日历最终将如下:||----------------------------------|莫|涂|我们|日|神父|萨|苏||[27]|28|29|30|31|01|02||03|04|05|06|07|08|09|.|..|..|..||..|..|..|..|..|..|..||31|01|02|03|04|05|06|在此“图像”中,这是我要查找的[27]日期。解决方案(找到我更好/更清洁的循环然后计算):publicDateTimeFirstDay(){vardate=newDateTime(Date.Year,Date.Month,1);while(true){if(date.DayOfWeek==DayOfWeek.Monday)返回日期;日期=date.AddDays(-1);}归期;}publicDateTimeLastDay(){vardate=newDateTime(Date.Year,Date.Month,DateTime.DaysInMonth(Date.Year,Date.Month));while(true){if(date.DayOfWeek==DayOfWeek.Sunday)返回日期;日期=date.AddDays(1);}归期;}/BRAndreas我会这样做。这很容易理解:varfirstDayOfMonth=newDateTime(year,month,1);DateTimestartOfCalendar=FirstDayOfWeekOnOrBefore(firstDayOfMonth,DayOfWeek.Monday);publicstaticDateTimeFirstDayOfWeekOnOrBefore(DateTimedate,DayOfWeekdayOfWeek){while(date.DayOfWeek!=dayOfWeek){date=date.AddDays(-1);}}归期;此外,如果您想将日历更改为星期一以外的日期,现在就可以。使用模运算的解决方案不可维护。您可以使用模数来计算要填充的天数,而无需条件语句:DateTimefirstOfMonth=newDateTime(year,month,1);varweekDay=firstOfMonth.DayOfWeek;intfillerDays=((int)weekDay+6)%7;日期时间firstDayInCalendar=firstOfMonth.AddDays(-fillerDays);假设第一天你指的是星期一,你可以试试这个DateTimedt=newDateTime(2011,2,2);Console.WriteLine(dt.AddDays((8-(int)dt.DayOfWeek)%7));我不喜欢while循环,因为它们与LINQ一起使用很昂贵希望其他人可以重用此代码:(如果您在美国,则只需删除[+6)%7)]两行)//////展开月份。///||///------------------------------------///|莫|涂|我们|日|神父|萨|苏|///|[27]|28|29|30|31|01|02|//03|04|05|06|07|08|09|///|..|..|..|..|..|..|..|///|..|..|..|..|..|..|..|///|31|01|02|03|04|05|06|//////感兴趣的月份中的某一天,开始日期更新为firstDayInCalendar的日期///要显示的天数。此值为(28、35或42)publicstaticintExpandMonth(refDateTimestart){DateTimefirst=newDateTime(start.Year,start.Month,1);DateTimelast=newDateTime(start.Year,start.Month,DateTime.DaysInMonth(start.Year,start.Month));开始=第一个.AddDays(-((int)first.DayOfWeek+6)%7);last=last.AddDays(7-((int)last.DayOfWeek+6)%7);返回last.Subtract(start).Days;}//Thomas我发现自己经常需要这样做,所以我创建了以下扩展方法publicstaticDateTimeFirstDateOfCalendarMonth(thisDateTimedt,DayOfWeekfirstDayOfWeek=DayOfWeek.Sunday){dt=newDateTime(dt.Year,dt.Month,1);while(dt.DayOfWeek!=firstDayOfWeek){dt=dt.AddDays(-1);}返回dt;像这样使用它varfirstCalDate=DateTime.Now.FirstDateOfCalendarMonth();它默认星期日作为第一个DayOfWeek,但你可以像这样将它传递给你喜欢的DayOfWeek:varfirstCalDate=DateTime.Now.FirstDateOfCalendarMonth(DayOfWeek.Monday);DateTimestart_date=Cal_start_date.SelectedDate;DateTimeend_date=Cal_end_date.SelectedDate;字典dic_week_day=newDictionary();=2;dic_week_day["星期二"]=3;dic_week_day["星期三"]=4;dic_week_day["星期四"]=5;dic_week_day["星期五"]=6;dic_week_day["星期六"]=7;DateTimefirst_day=start_date.AddDays(1-start_date.Day);intselected_day=dic_week_day[Drp_day_of_week.SelectedValue.ToString()];字符串str_html="";对于(日期时间i=first_d哎;我selected_day){temp_date=i.AddDays((7-day_of_week)+selected_day);}else{temp_date=i.AddDays(selected_day-day_of_week);}DateTimelast_day_of_month=(temp_date.AddMonths(1)).AddDays(-temp_date.Day);if(Drp_occurrence.SelectedValue.ToString()=="odd"){if(start_dateUPDATE:下面的代码有错误!使用模运算来补偿.NET在周日开始一周的情况!请参阅其他解决方案at(没有额外功能的解决方案)如果需要查找“27”(即显示月份的第一天),只需使用:以上是C#学习教程:查找日历的第一天内容,如果有用给你和你需要了解更多C#学习教程,希望你多多关注—DateTimemonthStart=newDateTime(year,month,1);DateTimemonthDisplayStart=monthStart.AddDays(-((int)monthStart.DayOfWeek-1));本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,转载请注明出处:

最新推荐
猜你喜欢