Как определить, попадает ли данная дата в следующую неделю / месяц

1

например, я должен выбрать в datetimepicker май 16,2014, поле messge выскочит "На этой неделе", и если я выберу в datetimepicker май 20,2014, он выскочит "На следующей неделе", а также 20 июня 2014 года выскочит ", В следующем месяце".

Я попробовал это.

  System.Globalization.CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentCulture;
        DayOfWeek firstDayOfWeek = ci.DateTimeFormat.FirstDayOfWeek;
        int offset = firstDayOfWeek - DateTime.Now.DayOfWeek;
        DayOfWeek lastDayOfWeek = DateTime.Now.AddDays(offset).AddDays(6).DayOfWeek;
        DateTime nextmonth = DateTime.Now.AddMonths(1);



        DateTime input = DateTime.Now.AddDays(1);
        input = dateTimePicker1.Value;
        DateTime startOfWeek = DateTime.Today;
        while (startOfWeek.DayOfWeek != firstDayOfWeek)
            startOfWeek = startOfWeek.AddDays(-1);
        DateTime endOfWeek = DateTime.Now;
        while (endOfWeek.DayOfWeek != lastDayOfWeek)
            endOfWeek = endOfWeek.AddDays(1);

        bool thisWeek = input >= startOfWeek && input <= endOfWeek;
        bool Thismonth = input == startOfWeek && input < endOfWeek;
        bool nextMonth = input == nextmonth;

        if (thisWeek == true)
        {
            label1.Text = "This Week";
        }
        else if (thisWeek == false)
        {
            label1.Text = "Next Week";
        }
         else if (nextMonth == true) 
        {
            label1.Text = "Next Month";
        }
Теги:
datetime

1 ответ

2

Не слишком много проблем. С# предоставляет множество функций времени по дате, но не "Является ли эта неделя", хотя вы могли бы написать для этого метод расширения.

System.Globalization.CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentCulture;
DayOfWeek firstDayOfWeek = ci.DateTimeFormat.FirstDayOfWeek;
int offset = firstDayOfWeek - DateTime.Now.DayOfWeek;
DayOfWeek lastDayOfWeek = DateTime.Now.AddDays(offset).AddDays(6).DayOfWeek;

DateTime input = DateTime.Now.AddDays(1);
DateTime startOfWeek = DateTime.Today;
while (startOfWeek.DayOfWeek != firstDayOfWeek)
    startOfWeek = startOfWeek.AddDays(-1);
DateTime endOfWeek = DateTime.Now;
while (endOfWeek.DayOfWeek != lastDayOfWeek)
    endOfWeek = endOfWeek.AddDays(1);

Console.WriteLine("Week starts: " + startOfWeek);
Console.WriteLine("Week ends: " + endOfWeek);
Console.WriteLine("Input was: " + input);

Console.Write("Is input this week? ");
bool thisWeek = input >= startOfWeek && input <= endOfWeek;
Console.WriteLine(thisWeek);
  • 1
    +0: Хорошее начало - ваш ответ нуждается в работе: используйте правильное свойство «первый день недели» для текущей культуры, удалите случайный текст (например, «не слишком большая проблема»). Пожалуйста, также используйте согласованный стандарт кодирования для открытого кода. Следующее соглашение C # по умолчанию для имен переменных - startOfWeek . Также постарайтесь не смешивать объявление var / startOfWeek в одном и том же небольшом фрагменте кода.
  • 1
    Спасибо за ввод @AlexeiLevenkov. Я последовал вашему совету и обновил свой ответ, чтобы улучшить ответ.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню