我在Forms应用程序中有一个DataTimePicker。是否有一种简单的方法(最好是在C#中)来获得一个月的第一天和最后一天。所以例如12月1日我想要获得2014年11月24日和2015年1月4日,如图所示。
答案 0 :(得分:3)
我认为它应该是这样的(例如int year = 2014; int month = 12当月):
DateTime dt = new DateTime(year, month, 1);
int offset = ((int)dt.DayOfWeek - (int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek + 6) % 7 + 1;
DateTime firstDate = dt.AddDays(-offset);
DateTime lastDate = firstDate.AddDays(41);
您可以看到DateTimePicker将月份的第一行放在第一行,除了它是一周的第一天。然后第一个月是在第二行。因此,您必须查看一周中第一天的文化背景。
答案 1 :(得分:0)
这是我试过的另一个,它正在工作,但我看到Fratyx已经回答了问题。所以我会在这里发布它。
private static void Main(string[] args)
{
DateTime date = new DateTime(2014, 12, 1);
var firstAndLastDays = getFirstDateInDatePicker(date);
}
private static Tuple<int, int> getFirstDateInDatePicker(DateTime date)
{
int totalDaysInMonth = DateTime.DaysInMonth(date.Year, date.Month);
int totalDiff = TOTAL_DAYS - totalDaysInMonth;
DateTime firstDayOfMonth = new DateTime(date.Year, date.Month, 1);
DateTime lastDayOfMonth = new DateTime(date.Year, date.Month, totalDaysInMonth);
int subtractor = (6 + (int)firstDayOfMonth.DayOfWeek) * -1;
return new Tuple<int, int>(firstDayOfMonth.AddDays(subtractor).Day,
lastDayOfMonth.AddDays(totalDiff + subtractor).Day);
}