如何在DateTimePicker的月视图中获取第一天和最后一天

时间:2014-12-01 07:09:00

标签: c# datetimepicker weekday

我在Forms应用程序中有一个DataTimePicker。是否有一种简单的方法(最好是在C#中)来获得一个月的第一天和最后一天。所以例如12月1日我想要获得2014年11月24日和2015年1月4日,如图所示。

DateTimePicker Control

2 个答案:

答案 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);
}