2016-03-19 9 views
-3

Kann mir bitte jemand helfen. Was ich zur C# Logik für die Anzeige im Voraus benötige und Sequenzreihenfolge sechs Datumslisten am Montag. Im Voraus sollte die Datumsliste nach 12.00 Uhr geändert werden. Zum Beispiel wird am 28. März das Datum am selben Tag (28. März) bis 12.00 Uhr angezeigt. Nach 12.01 Uhr beginnt das erste Datum vom 11. April 2016. Auch die gleiche Sequenz (angehängter Bildschirm). Es ist nie 4. April anzeigen, 18. April etc .. (Sequenz Reihenfolge) ..14 Tage (zweiwöchentlich) Logik im Voraus und Reihenfolge Reihenfolge

Dies ist mein Aufwand C# -Code, es ist nur einzelne Datumsliste anzuzeigen.

public static void Main(string[] args) 
 
     { 
 
      DateTime time = new DateTime(2016, 3, 25); 
 
      var breaks = DateTime.Today.AddHours(12D); 
 
      if (breaks>=DateTime.Now) 
 
      { 
 
            
 
      
 
      } 
 
      else if (time<DateTime.Now) 
 
      { 
 

 

 
      } 
 
      
 
      DateTime anotherTime = DateTime.Now; 
 
      var allTimes = new HashSet<DateTime>(); 
 

 
      for (int i = 0; i < 6; i++) 
 
      { 
 
       anotherTime = time.AddDays(14); 
 
       time = anotherTime; 
 
       Console.WriteLine(anotherTime.ToLongDateString()); 
 
       allTimes.Add(time); 
 
      } 
 

 

 
    } 
 
    }

Dies ist meine letzte

im Voraus sechs aktuelle Liste löschte

enter image description here

+3

dass ein seltsam formulierte Frage ist ... – Savlon

+0

Also, was ist falsch mit, was Sie haben? – CodingGorilla

+0

Mein C# -Code zeigt nur 2016, 3, 14 Montag-Datumslisten an. Was ich Montag bis Freitag (im Voraus) anzeigen muss – Rob

Antwort

1

Versuchen Sie, diese

static void Main(string[] args) 
     { 
      DateTime today = DateTime.Now; 
      if ((today.DayOfWeek == DayOfWeek.Monday) && (today > new DateTime(today.Year, today.Month, today.Day, 12, 0, 0))) 
      { 
       today.AddDays(1); 
      } 
      int offsetToMonday = 7 - (((int)today.DayOfWeek - 1) % 7); 
      DateTime nextMonday = today.AddDays(offsetToMonday); 
      DateTime startDate = (nextMonday.DayOfYear/7 % 2) == 0 ? nextMonday : nextMonday.AddDays(7); 
      DateTime endDate = startDate.AddDays(83); 
      List<DateTime> dates = new List<DateTime>(); 

      for (DateTime date = startDate; date <= endDate; date = date.AddDays(1)) 
      { 
       dates.Add(date); 
      } 

      var groupedDays = dates.AsEnumerable() 
       .GroupBy(x => x.Subtract(startDate).Days % 14) 
       .OrderBy(x => x.Key) 
       .Where(x => x.Key == 0); 

      foreach (var group in groupedDays) 
      { 
       foreach (DateTime day in group) 
       { 
        Console.WriteLine(day.ToString("dddd, dd MMMM yyyy")); 
       } 
       Console.WriteLine(); 
      } 
      Console.ReadLine(); 
     } 
+0

Vielen Dank für Ihren Code. Das Problem war, wenn ich DateTime startDate = new DateTime (2016, 3, 14) hinzufüge, das Datum 14,15,16,17,18 anzeigen (das Anzeigedatum sollte größer sein als das Systemdatum). Dein Code nur wöchentlich. Ich brauche nur 14 Tage Logik. – Rob

+0

Auch Datumslisten sollten nur, im Voraus 6 Datumslisten immer angezeigt werden.Zum Beispiel Montag (21. März, 4. April, 18. April, 2. Mai, 16. Mai und 30. Mai) – Rob

+0

Geändert Gruppierung zu zwei Wochen mit DayOfYear – jdweng

1

Ich bin nicht sicher, ob ich verstehe, was Sie genau wollen. Aber ich habe eine ähnliche Funktion in meinem Repository.

public static DateTime GetNextDayOfWeek(DateTime _date, DayOfWeek _dayOfWeek) 
    { 
     DateTime Result; 
     int diff = _date.DayOfWeek - _dayOfWeek; 
     if (diff == 0 && _date.Hour * 100 + _date.Minute <= 1200) 
      return _date; 
     if (diff < 0) 
     { 
      diff += 7; 
     } 
     Result = _date.AddDays(-1 * diff).Date; 
     if (Result <= _date) 
      Result = Result.AddDays(7); 
     return Result; 
    } 

habe ich diesen Teil für Ihre Bedürfnisse

if (diff == 0 && _date.Hour * 100 + _date.Minute <= 1200) return _date; 

Diese Funktion ein Datum und einen gewünschten Tag der Woche nimmt und gibt den nächsten nächsten Tag, wenn der gewünschte Wochentag anwesend sein werden. Da ich Sie 6 Packungen davon verstehen, können Sie es in einer Schleife so:

DateTime next; 
next=DateTime.Now; 
foreach(DayOfWeek dow in Enum.GetValues(typeof(DayOfWeek))) 
{ 
    for(var n=0;n<6;n++) 
    { 
     next=GetNextDayOfWeek(next, dow); 
     //do something with your date 
    } 
} 

Sie einen anderen Parameter hinzufügen könnte, wie viele Tage vorher wand. Zur Zeit, wenn es in Ihrem Fall 7. fixiert würden Sie brauchen 14

+0

Datum Start Tag 14 März Montag, nächste 14 Tage sollte Montag 28. März sein (kann nicht Montag 21. März sein) – Rob

+0

Erstellen Sie einfach ein Datum als 14 Mach 2016 und geben Sie es als ein erster Parameter für die Funktion. Und ändere den Wert von 7 auf 14. – TSungur

+0

Kannst du mir bitte diese Zeile erklären (diff == 0 && _date.Hour * 100 + _date.Minute <= 1200), 100 und 1200. Danke – Rob

Verwandte Themen