2016-04-15 9 views
-1

Ich habe eine Windows-Anwendung, wo Benutzer Startzeit und Endzeit eingeben, wie Sie überprüfen, ob Endzeit ist nächsten Tag Zeit.Wie überprüft man, ob die Zeit am nächsten Tag ist

example: start time   end time 
      1:00:00 AM   5:00:00 AM 
      5:00:00 AM   10:00:00 AM 
      10:00:00 AM   5:00:00 PM 
      5:00:00 PM   10:00:00 PM 
      10:00:00 PM   1:00:00 AM --(next day) 
      1:00:00 AM   5:00:00 AM 

Ich versuche, so etwas wie unten:

private void GenerateReportWithStartTimeandEndTime(string StartTime, string EndTime, string DailyTime) 
{ 
    DateTime tempStartTime = DateTime.ParseExact(StartTime, "HH:mm:ss tt", CultureInfo.InvariantCulture); 
    DateTime tempEndTime = DateTime.ParseExact(EndTime, "HH:mm:ss tt", CultureInfo.InvariantCulture); 

    DateTime midNightToday = DateTime.Today.AddDays(1); 
    var StarthourDifference = (midNightToday - tempStartTime).TotalHours; 
    var EndhourDifference = (midNightToday - tempEndTime).TotalHours; 
    if (StarthourDifference - EndhourDifference > 0) 
    { 

    } 
    else 
    { 

    } 
} 
+1

Wenn alles, was Sie ist das bloße Zeitwerte haben, die einzige Logik, die Sie anwenden können, ist zu prüfen, ob der Endwert kleiner als der Startwert ist und * annehmen *, dass dies den nächsten Tag bedeutet. Wenn das nicht das ist, was du tun willst, musst du erklären, wie wir (und der Computer) das magisch bestimmen sollen, wenn es nicht genug Informationen zu geben scheint. –

+0

Start- und Endzeit von * was * genau? –

+0

Beginn und Ende eines Tages – Tan

Antwort

4

wie etwa

bool IsNextDay = EndTime < StartTime; 

Code:

//case 1 
TimeSpan StartTime = DateTime.ParseExact("5:00:00 PM", "h:mm:ss tt", CultureInfo.InvariantCulture).TimeOfDay; 
TimeSpan EndTime = DateTime.ParseExact("10:00:00 PM", "h:mm:ss tt", CultureInfo.InvariantCulture).TimeOfDay; 
bool IsNextDay = EndTime < StartTime; //false 

//case 2 
TimeSpan StartTime2 = DateTime.ParseExact("10:00:00 PM", "h:mm:ss tt", CultureInfo.InvariantCulture).TimeOfDay; 
TimeSpan EndTime2 = DateTime.ParseExact("1:00:00 AM", "h:mm:ss tt", CultureInfo.InvariantCulture).TimeOfDay; 
bool IsNextDay2 = EndTime2 < StartTime2; //true 
+3

Könnte auch '<=' sein, abhängig davon, ob 0 Stunden oder 24 Stunden die Interpretation sein soll, wenn die beiden Zeiten gleich sind. –

+0

@ LasseV.Karlsen, während der Kommentar richtig ist, kommt die gesamte OP-Spezifikation in Stücke, wenn der Zeitunterschied 24 Stunden sein kann (es ist schon schlecht, aber wenn Zeit diffs 24hr oder mehr sein kann, wird es so schlecht, wie es nur geht :-)) – Jcl

+0

Ich weiß alles über "so schlecht wie es nur geht", ich habe jeden Tag mit Daten und Zeiten in unserer Software zu tun und muss genau mit diesen Problemen umgehen, * einschließlich * Nur-Zeit-Daten, die mehr als zwei umfassen Termine. –

0

Dies funktioniert gut:

Für eine Zeit, um am nächsten Tag zu sein (da der Unterschied immer 5 Stunden ist), wenn die Ende-Zeit im hh:mm:ss tt-Format ist weniger beginnen geparste Zeit, dann ist es ein Tag am nächsten Tag.

var t1 = "10:00:00 PM"; 
var t2 = "01:00:00 AM"; 

var time1 = DateTime.ParseExact(t1, "hh:mm:ss tt", CultureInfo.InvariantCulture); 
var time2 = DateTime.ParseExact(t2, "hh:mm:ss tt", CultureInfo.InvariantCulture); 

if (time2 < time1) 
{ 
    Console.WriteLine("next day"); 
} 
else 
{ 
    Console.WriteLine("same day"); 
} 
0

Sie benötigen einen Zustand wie folgt aus: (startdate> EndDate) und (EndDate - startdate)> 24 Stunden

Verwandte Themen