Laden...

Datum - Loop

Erstellt von invisible vor 18 Jahren Letzter Beitrag vor 18 Jahren 4.006 Views
I
invisible Themenstarter:in
48 Beiträge seit 2004
vor 18 Jahren
Datum - Loop

Ist es möglich eine Schleife über einen Zeitbereich laufen zu lassen? Also z.B. vom 20.05.2005 bis 03.05.2005? Irgendwie habe ich keinen Ansatz. Einen TimeSpan für die Tage nützt mir nicht viel da ich die jeweiligen Daten brauche und dann aufwendig die Monatsübergänge ausprogrammieren müsste.

Gibt es eine bessere Möglichkeit? Bräuchte etwas Starthilfe 🙂 Danke!

X
2.051 Beiträge seit 2004
vor 18 Jahren

z.b. so:

DateTime dat1 = new DateTime(2005, 10, 1);
DateTime dat2 = new DateTime(2005, 10, 10);
while(dat1 < dat2)
{
	Console.WriteLine(dat1.ToString());
	dat1 = dat1.AddDays(1);
}
I
invisible Themenstarter:in
48 Beiträge seit 2004
vor 18 Jahren

Hmm.... Kopf kratz einfacher gehts kaum noch.... Ich geh mal nen doppelten Espresso trinken. Danke jedenfalls.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo zusammen,

doch, es geht noch einfacher 🙂


DateTime dat2 = new DateTime(2005, 10, 10);
for (DateTime dat1 = new DateTime(2005, 10, 1); dat1 < dat2; dat1 = dat1.AddDays(1))
{
    Console.WriteLine(dat1);
}

Jedenfalls finde ich eine for-Schleife hier viel passender.

herbivore

X
2.051 Beiträge seit 2004
vor 18 Jahren

Original von herbivore
doch, es geht noch einfacher 🙂

wenn du unübersichtlicher gemeint hast, dann kann man es noch steigern 😉

for (DateTime dat1 = new DateTime(2005, 10, 1),dat2 = new DateTime(2005, 10, 10); dat1 < dat2; Console.WriteLine(dat1),dat1 = dat1.AddDays(1));
49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Xqgene,

ich finde es mit for (meine Variante) übersichtlicher, klarer und praktischer als mit while.

übersichtlicher - ok, kann man drüber streiten

klarer - die Schleife, um die es hier geht, ist eine klassische Zählschleife, mit Initialisierung, Bedingung und Reinitialsierung. Dafür gibt es in der for-Schleife feste Orte und durch diese Orte ist klar, welcher Codeteil welche Bedeutung hat. Deshalb finde ich es auch übersichtlicher.

praktischer - die Reinitialsierung wird weniger leicht vergessen, sicher bei jedem Schleifendurchlauf ausgeführt und kann - noch wichtiger - durch ein continue nicht (versehentlich) übergangen werden.

Dein Beispiel "zerstört" die Struktur der for-Schleife in dem du mehr oder weniger willkürlich Anweisungen in die einzelnen Teile des Schleifenkopfes schreibst.

herbivore

PS: Wenn einem die Performace egal ist (oder wenn der Complier new DateTime(2005, 10, 10) als quasi Datumsliteral erkennen würde) könnte man schreiben


for (DateTime dat = new DateTime(2005, 10, 1); dat < new DateTime(2005, 10, 10); dat = dat.AddDays(1))
{
    Console.WriteLine(dat);
}

wodurch es in meinen Augen noch klarer wird.

X
2.051 Beiträge seit 2004
vor 18 Jahren

Original von herbivore
Dein Beispiel "zerstört" die Struktur der for-Schleife in dem du mehr oder weniger willkürlich Anweisungen in die einzelnen Teile des Schleifenkopfes schreibst.

thja... man soll die Möglichkeiten einer Sprache voll ausnutzen g.
.NET Golf lässt grüßen!

Über die Übersichtlichkeit kann man sich streiten. Ist eh Ansichtssache.