2016-08-02 8 views
0

diese Datumzeit Januar Gegeben 1 2015 um 23:00 Uhr:Datetime zum ersten Auftreten von Stunde/Minute/Sekunde

var someDate = new DateTime(2015, 1, 1, 23, 0, 0); 

Und angesichts der int 6, die die gewünschte Stunde ist, wie kann ich zurückkehren das erste folgende Datum, an dem die Stunde 6 ist? In diesem Fall geben someDate und 6 eine neue DateTime vom 2. Januar 2015 um 06:00 Uhr zurück.

+0

Sie könnten eine Schleife tun, die eine Stunde hält Zugabe, bis die Stunde 6. Das oder Scheck Wenn die Stunde weniger als 6 ist und den Unterschied addiert, oder wenn es mehr ist, dann addiere 6 + (24 - aktuelle Stunde). – juharr

Antwort

3

Ich würde einfach die Stunden der ursprünglichen Datum hinzufügen und an einem anderen Tag hinzufügen, wenn das Ergebnis vor der ursprünglichen Zeit ist:

var someDate = new DateTime(2015, 1, 1, 23, 0, 0); 
var result = someDate.Date.AddHours(6); // note the "Date" part 
if (result < someDate) result = result.AddDays(1); 
+0

'result juharr

+0

@juharr bitte lesen Sie sorgfältig: Ich habe 6 Stunden zu etwasDate hinzugefügt. _Datum_ ! –

+0

OK ich sehe was du machst. Allerdings ist nicht klar, ob das OP die aktuellen Minuten und Sekunden verlieren möchte. – juharr

0

So etwas sollte es tun:

public DateTime FollowingHour(DateTime start, int hour) 
{ 
    DateTime atHour = start.Date.AddHours(6); 

    if(atHour < start) 
    { 
     atHour += TimeSpan.FromDays(1); 
    } 

    return atHour; 
} 
0

Sie müssen nur einen Tag zum Datum und sechs Stunden zum Ergebnis hinzufügen:

var someDate = new DateTime(2015, 1, 1, 23, 0, 0); 
var result = someDate.Date.AddDays(1).AddHours(6); 

Beachten Sie die Verwendung von Date Eigenschaft - es gibt Ihnen den Start des Tages und von dort aus ist es einfach, vorwärts zu navigieren.

+1

Das funktioniert nicht für 'neue DateTime (2015, 1, 1, 1, 0, 0)' wo die Antwort sein sollte '1. Januar 2015 um 06: 00' – stuartd

0

Try this:

while(someDate.Hour != 6){ 
    someDate = someDate.AddHours(1); 
} 
+1

Ist es [Las Vegas Algorithmus] (https://de.wikipedia.org/wiki/Las_Vegas_algorithm)? – Sinatr

+0

Dies funktioniert auch, aber wenn Sie ab 07.00 Uhr hinzufügen, ist es nicht annähernd so effizient wie die angenommene Antwort. Oder liege ich falsch? – ohyeah

+0

bei maximal 23 Wiederholungen, nicht zu viele Ich denke aber ja, die akzeptierte Antwort ist perfekt. – JGonDev

0

Sie 24h Uhr gemeint Unter der Annahme, können Sie dies versuchen:

public DateTime GetDate(DateTime someDate,int hour) 
    { 
     return someDate.Hour>=hour? someDate.Date.AddDays(1).AddHours(6):someDate.Date.AddHours(6); 
    } 
Verwandte Themen