Ich habe versucht, das Datum der 5. Woche eines Tages in einem Monat wie Montag der 5. Woche, Datum der 5. Woche, Di, Mi usw. basierend auf dem Datum desselben Monats zu ermitteln. Dieses Datum kann zu jeder Woche desselben Monats gehören. Ich habe es versucht

DateTime MonthEventDate=05/01/2016; //Date format in dd/MM/yyyy format

DayOfWeek EventDay="Sunday"; //For Example i want to find 5th Sunday in January Month, but days too will change everytime based on user selection

string SelectedWeek="5"; //Here i'm getting the week in which i need to find the given date i.e, 5th Monday or Tuesday & so on  
if (SelectedWeek == "5")
{
    //Here i tried to add number of days to my initial day to find 5th day date, but every time its returning next month value 
    MonthEventDate = MonthEventDate.AddDays((EventDay < MonthEventDate.DayOfWeek ? 31 : 28) + EventDay - MonthEventDate.DayOfWeek);
}

Ich weiß, dass die Logik falsch ist, aber ich möchte das Datum des 5. Wochentags erhalten. Wenn dieser Tag nicht vorhanden ist, geben Sie 0 zurück. Suchen Sie nach einer Anleitung Hinweis: Hier ändert sich der Monat basierend auf Benutzereingaben, also wie das Datum zurückgegeben wird vom fünften Tag, wenn es im gegebenen Monat existiert

3
Amar 23 Dez. 2015 im 14:24

3 Antworten

Beste Antwort

Dies sollte Ihnen den 5. Tag geben (falls es einen gibt) ...

 DateTime dayInMonth = DateTime.Now;
 DayOfWeek dayToFind = DayOfWeek.Friday;

 var fifth= Enumerable.Range(1, DateTime.DaysInMonth(dayInMonth.Year, dayInMonth.Month))
            .Select(day => new DateTime(dayInMonth.Year, dayInMonth.Month, day))
            .Where(day => day.DayOfWeek == dayToFind)
            .Skip(4)
            .FirstOrDefault();
2
PaulB 23 Dez. 2015 im 11:46

Erweiterung der Antwort von @Soner Gönül. Bei der Eingabe geben Sie den erforderlichen Wochentag, den erforderlichen Monat und das erforderliche Jahr ein. Bei der Ausgabe erhalten Sie das Datum des gleichen Wochentags in der fünften Woche oder null

    public DateTime? FifthDay(DayOfWeek dayOfWeek, byte monthNum, int year)
    {
        if (monthNum > 12 || monthNum < 1)
        {
            throw new Exception("Month value should be between 1 and 12");
        }

        var searchDate = new DateTime(year, monthNum, 1);
        var weekDay = searchDate.DayOfWeek;

        if (weekDay == dayOfWeek)
        {
            searchDate = searchDate.AddDays(28);
        }

        for (DateTime d = searchDate; d < d.AddDays(7); d = d.AddDays(1))
        {
            if (d.DayOfWeek == dayOfWeek)
            {
                searchDate = searchDate.AddDays(28);
                break;
            }
        }

        if (searchDate.Month == monthNum)
            return searchDate;

        return null;
    }
0
Mikhail Tulubaev 23 Dez. 2015 im 11:48

Sie können auf diesen Demo-Code verweisen

  int requiredDay = 5; //Day number i.e 0-6(Sunday to SaturDay)
  DateTime day = new DateTime(2016, 1, 1); //Month,year,Date
  if (DateTime.DaysInMonth(day.Year, day.Month) > 28)
  {
      //Get the first day name of the month
       int firstMonthDay = (int)day.DayOfWeek;

       int offset=0;

      //Number of days from the first day for the required day
      if (firstMonthDay <= requiredDay)
          offset = requiredDay - firstMonthDay;
     else
        offset = 7 - firstMonthDay + requiredDay;
//
    DateTime firstoccurence = day.AddDays((double)offset);
    DateTime fifthOccurence = firstoccurence.AddDays(28);
    if (fifthOccurence.Month == firstoccurence.Month)
          MessageBox.Show(fifthOccurence.ToString());
    else
         MessageBox.Show("No 5th Occurence for this day");
   }
0
Venkatesh 24 Dez. 2015 im 04:36