2010-11-09 17 views
6

ich zum Beispiel habe das Datum „2010-11-09, DienstagHolen Montag und Sonntag für einen bestimmten Datetime in C#

Jetzt mag ich die Datumzeit der Montag und Sonntag bei Lügen bekommen das oben genannte Datum.

Wie würden Sie das tun?

+0

@Lisa; Du meinst, du willst die Daten von Montag und Sonntag, die in der Woche von diesem Dienstag sind? – BeemerGuy

+0

@Beemer: Mit der Konvention, dass die Woche am Sonntag beginnt, würde das nicht funktionieren. –

+0

@Hank; Ja es würde. OP möchte vielleicht den Sonntag abrufen, der die Woche des Dienstag beginnt. Jede Logik ist möglich, solange wir nicht wissen, was genau sie wollen. Überprüfen Sie die Antwort unten mit Poster "Licht", die das tut. – BeemerGuy

Antwort

36

Das ist woanders vermutlich, was Sie nach:

DateTime date = DateTime.Today; 

// lastMonday is always the Monday before nextSunday. 
// When date is a Sunday, lastMonday will be tomorrow.  
int offset = date.DayOfWeek - DayOfWeek.Monday;  
DateTime lastMonday = date.AddDays(-offset); 
DateTime nextSunday = lastMonday.AddDays(6); 

Edit: da lastMonday nicht immer ist das, was der Name (siehe Kommentare) schlägt vor, die folgenden Einzeiler wahrscheinlich mehr auf den Punkt :

DateTime nextSunday = date.AddDays(7 - (int) date.DayOfWeek); 
+0

nette Lösung, viel sauberer als meins. – light

+3

Dies hat zwei Fehler, ein Tippfehler am Montag.AddDays .. sollte für montag in Kleinbuchstaben "m" sein. Auch um Sonntag von Montag zu bekommen, würden Sie 6 Tage und nicht 7 hinzufügen. Hinzufügen von sieben Tagen gibt Ihnen den folgenden Montag. – Banford

+3

Dies hat einen anderen Fehler. Wenn Heute ein Sonntag ist, wird es nächsten Montag (Offset = -1) statt letzten Montag zurückkehren. Cast als Integer Sunday gibt 0 zurück und Montag gibt 1 zurück, also Sonntag - Montag = -1. Hinzufügen dieser Zeile, wird es beheben: Offset = (Offset <0)? 6: Offset; – gijswijs

0

So etwas wie dies, natürlich würden Sie zu einem bestimmten Zeitpunkt von der Schleife brechen wollen, bevor die DateTime.MaxValue, aber dies tun soll:

DateTime dt = DateTime.Parse("2010-11-09, Thuesday"); 


     while (dt < DateTime.MaxValue) 
     { 

      if(dt.DayOfWeek == DayOfWeek.Sunday || dt.DayOfWeek == DayOfWeek.Monday) 
       Console.WriteLine(dt.ToString()); 
      dt.AddDays(1); 
     } 
0

Datetime Montag = DateTime.Now.AddDays ((DateTime.Now.DayOfWeek - 1) * -1) .Date;

DateTime Sonntag = DateTime.Now.AddDays (7 -DateTime.Now.DayOfWeek) .Datum;

+1

Ich glaube nicht, dass das am Sonntag funktioniert. Würdest du morgen und nächsten Sonntag, die heute (Sonntag) nicht gebunden waren, nicht bekommen? (0-1) * - 1 = 1, 7-0 = 7. –

0

Es ist leicht, wenn Sie eine bedingte Methode

if (v_datetime.DayOfWeek== DayOfWeek.Sunday) 
{ 
return true; 
} 

if (v_datetime.DayOfWeek== DayOfWeek.Monday) 
{ 

} 
verwenden
+0

Bitte aktualisieren Sie Ihre Antwort, um eine vollständige Antwort auf die ursprüngliche Frage zu geben, anstatt nur auf den Kommentar von jemandem zu antworten. – Mike

0
/// <summary> 
/// Returns the day that is the specific day of week of the input day. 
/// </summary> 
/// <param name="input">The input day.</param> 
/// <param name="dayOfWeek">0 is Monday, 6 is Sunday.</param> 
/// <returns></returns> 
public static DateTime GetDayOfWeekOfSpecific(DateTime input, int dayOfWeek) 
{ 
    if(input.DayOfWeek == DayOfWeek.Sunday) 
    { 
     dayOfWeek -= 7; 
    } 
    // lastMonday is always the Monday before nextSunday. 
    // When today is a Sunday, lastMonday will be tomorrow.  
    int offset = input.DayOfWeek - DayOfWeek.Monday; 
    DateTime lastMonday = input.AddDays(-offset); 
    DateTime nextDayOfWeek = lastMonday.AddDays(dayOfWeek); 
    return nextDayOfWeek; 
} 
Verwandte Themen