2017-01-10 4 views
0

Dies ist mein Problem jetzt, ich möchte die gesamten Stunden und Minuten der Arbeit zu bekommen. Beispiel von Jan. 11 2017 22:00 bis 12 Januar 2017 7:00. Bisher habe ich es nur, wenn das Enddatum nichtSo erhalten Sie die Gesamtstunden mit verschiedenen Daten in C#

DateTime pin = today, pout = DateTime.Parse(empTime); 
TimeSpan spanMe = pout.Subtract(pin); 

spanMe.Hours 
spanMe.Minutes 

ändern ist es gibt mir negative Zahlen.

+5

'es gibt mir negative Zahlen.' <= Das wird erwartet, wenn Sie einen größeren Gegenstand von einem kleineren Gegenstand subtrahieren (dh eine neuere Zeit von einer älteren Zeit subtrahieren). Wenn Sie den Unterschied immer als positive Zahl sehen möchten und nicht berücksichtigen möchten, welche größer ist, dann wickeln Sie das Ergebnis der Eigenschaften (wie .Hours) in 'Math.Abs' (absoluter Wert). – Igor

+2

Sie sollten die Eigenschaft "TotalHours" (oder 'TotalMinutes') – stuartd

+0

zum Beispiel Jan verwenden. 11 2017 @ 7:00 bis 22:00 gibt es mir die korrekte Gesamtzahl von Stunden und Minuten. aber ab 22 Uhr von Jan. 11 bis 7 Uhr bis zum 12. Januar gibt es einen Fehler. – Denver

Antwort

1

sollte es funktionieren:

  DateTime pin = DateTime.Parse("jan 11 2017 22:00"); 
      DateTime pout = DateTime.Parse("Jan 12 2017 7:00"); 

      TimeSpan spanMe = pout.Subtract(pin); 

      Console.WriteLine("Hours : {0}, Minutes : {1}", spanMe.Hours, spanMe.Minutes); 

      Console.ReadLine(); 
+0

Wie kann ich das Datum und die Zeit hinzufügen? – Denver

+0

Das Hinzufügen von Datum zu Zeitspanne macht wenig Sinn, wenn Sie nicht nach dem Ende der Zeitspanne suchen. Was Sie wahrscheinlich wollen, ist spanMe.TotalMinutes(); – jdweng

+0

Ich werde dies als Antwort wählen, weil der Code ich ähnlich gemacht habe. – Denver

0

Wenn Sie wissen, was das späteste Datum ist, müssen Sie es entsprechend anordnen. Wenn nicht, können Sie nicht mit -1 multiplizieren:

double GetHouers(DateTime one, DateTime another) 
{ 
    var diff = (one - another).TotalHours; 
    return diff > 0 ? diff : diff * -1; 
} 
0

Sie können ein Datetime-Objekt aus einem anderen abziehen, und dann .TotalHours Eigenschaft der Datetime-Klasse verwenden, um die Anzahl der Stunden zu bekommen. Es gibt Ihnen einen doppelten Wert, der die Gesamtstunden darstellt.

DateTime pin = today, pout = DateTime.Parse(empTime); 
double hours = (pout - pin).TotalHours; 
3

es gibt mir negative Zahlen.

Das wird erwartet, wenn Sie einen größeren Gegenstand von einem kleineren Gegenstand subtrahieren (dh eine neuere Zeit von einer älteren Zeit subtrahieren). Wenn Sie die Differenz immer als positive Zahl sehen möchten und nicht berücksichtigen wollen, welche größer ist, dann wickeln Sie das Ergebnis der Eigenschaften (wie .Hours) in Math.Abs (absoluter Wert).

var hours = System.Math.Abs(spanMe.Hours); 
var minutes = System.Math.Abs(spanMe.Minutes); 

auch, wie durch @stuartd dort darauf hingewiesen, ist ein Unterschied zwischen Hours/Minutes und TotalHours/TotalMinutes. Stellen Sie sicher, dass Sie das richtige für Ihre Bedürfnisse verwenden.

+0

das gibt mir 16 Stunden Unterschied. – Denver

+0

@Denver - Der Computer wird nicht lügen oder einen Fehler machen, wenn 16 als '.Hours' in der TimeSpan-Differenz zwischen Ihren Daten zurückkommt, dann sind es 16 Stunden dazwischen. Überprüfen Sie Ihre Logik und überprüfen Sie Ihre tatsächlichen 'DateTime'-Instanzen, um sicherzustellen, dass sie tatsächlich das sind, was Sie denken/annehmen. – Igor

+0

@Denver - überprüfen Sie auch die 'DateTime'-Instanzen [Kind] (https://msdn.microsoft.com/en-us/library/system.datetime.kind (v = vs.110) .aspx) -Komponente, Subtraktion ein Instanz mit dem Wert 'DateTimeKind.Local' aus' DateTimeKind."Utc" (als Beispiel) könnte zu einem unerwarteten Ergebnis führen. – Igor

0
DateTime pin = today, pout = DateTime.Parse(empTime); 
TimeSpan spanMe = pin.Subtract(pout); 

var hours = spanMe.TotalHours; 
var minutes = spanMe.TotalMinutes; 

Sie wollen TotalHours und TotalMinutes wie diese verwenden werden Fraktionen davon zu behandeln, im Vergleich zu Hours und Minutes, die nur ganze Werte zurückgeben. Sie müssen auch die Reihenfolge Ihrer Operanden wie oben für den Subtraktionsschritt ändern.

Verwandte Themen