Ich baue ein Webformular in C#. Ich habe 3 Drops downs für Startzeit (Start Stunde, Start Minute und Startzeit des Tages (AM oder PM) und 3 für die Endzeit. Mein Ziel ist es, die Differenz zu berechnen. Alles funktioniert gut, bis Mittag oder Mitternacht wählen ich wähle Mittag und zu debuggen, zeigt der Wert als 1. Hier ist mein Code.Zeitspannenunterschied berechnet nicht richtig
var startHourDDL = ddlStartHour.SelectedValue;
var startMinuteDDL = ddlStartMinute.SelectedValue;
var startTOD = ddlStartTOD.SelectedValue;
int startHour = Convert.ToInt32(startHourDDL);
int startMinute = Convert.ToInt32(startMinuteDDL);
var finishHourDDL = ddlFinishHour.SelectedValue;
var finishMinuteDDL = ddlFinishMinute.SelectedValue;
var finishTOD = ddlFinishTOD.SelectedValue;
int finishHour = Convert.ToInt32(finishHourDDL);
int finishMinute = Convert.ToInt32(finishMinuteDDL);
if (startTOD == "PM")
{
startTime = new TimeSpan(startHour + 12, startMinute, 0);
}
else
{
startTime = new TimeSpan(startHour, startMinute, 0);
}
if (finishTOD == "PM")
{
finishTime = new TimeSpan(finishHour + 12, finishMinute, 0);
}
else
{
finishTime = new TimeSpan(finishHour, finishMinute, 0);
}
TimeSpan diff = finishTime - startTime;
string time = String.Format(diff.Hours + " Hours, " + diff.Minutes + " Minutes");
lblDurAmount.Text = time;
wenn ich also 02.00 für Startzeit und 16.00 Uhr für Zielzeit wählen, zeigt das Etikett 2 Stunden. wenn ich jedoch 12.00 für Startzeit und 14.00 Uhr für Zielzeit wählen erhalte ich -10 Stunden.
Dies ist, was ich für Startzeit, wenn ich, um 12:00 Uhr debuggen.
{1.00:00:00}
Hier
ist das, was ich bekomme, wenn ich wählen 05.00
{17:00:00}
Ich kann nicht herausfinden, warum es nicht gesetzt Mittag bis 24. Ich habe sogar versucht, das Hinzufügen einer if-Anweisung
if (startHour == 12 && startTOD)
{
startTime = new TimeSpan(24, startMinute, 0);
}
Aber das hat auch nicht funktioniert. Wert war immer noch 1,00.
Warum Sie 'TimeSpan' verwenden Daten zu speichern (zum Beispiel' finishTime')? – mjwills
12PM ohne irgendeinen anderen Kontext kommt nach 2PM, also, wenn Sie 2PM - 12PM subtrahieren, erhalten Sie -10hours. Sie müssen überprüfen, ob startTime nach finishTime ist, und die beiden Werte tauschen, wenn true ist. – Steve
@mjwillis. Kein wirklicher Grund. Ich hatte es mit TimeSpans zu tun, also machte ich alle TimeSpans – maltman