2009-03-03 1 views
5

Ich habe einen Wert Minute und ich möchte 2 Zeichenfolge haben Werte, die man mit, wie viele Stunden und die andere mit dem Protokoll, zB:Work out min und Stunden

Wert - 121 Minuten

String Stunden = 2
String Minuten = 1

Wert - 58 Minuten

String Stunden = 0
Zeichenfolge Minuten = 58

Wie kann ich das in C# ausarbeiten?

Antwort

34
var span = System.TimeSpan.FromMinutes(121); 
var hours = ((int)span.TotalHours).ToString();  
var minutes = span.Minutes.ToString(); 

Die ToString() ist, weil Sie für String-Wert gefragt ...

TotalHours die vollen Stunden in dem Timespan sind, können sie mehr als 24 (während der "Stunden" -Feld sein hat ein Maximum von 24)

Oh, und auf den zweiten Gedanken: Warum die TimeSpan verwenden und nicht selbst berechnen? Da TimeSpan bereits von Microsoft getestet wurde, verfügt es über eine nette, saubere Schnittstelle (mit Blick auf den Code, den Sie leicht sehen, was los ist, ohne eine Berechnung im Kopf zu haben) und es erstreckt sich leicht auf weitere Lösungen. (Haben Sie die Eingabe in Sekunden Verwenden Sie TimeSpan.FromSeconds() die Tage Willst du Verwenden span.TotalDays ...?.?)

Update:

Ich habe gerade bemerkt, Fehler in meiner Antwort: TotalHours Rückkehr ein Bruchwert aller Stunden, also müssen wir ihn auf eine ganze Zahl abschneiden, bevor wir ihn in eine Zeichenkette umwandeln.

+0

Dadurch werden Minuten nicht mit Nullen aufgefüllt. Hinzufügen von ToString ("00") sollte es beheben. – Coincoin

+0

@ Coincoin: Blick auf OP-Beispiel für 121 Minuten. Keine Auffüllung ist erforderlich. –

+0

Mein Fehler. Danke, dass du es aufgezeigt hast. – Coincoin

2
int value = 121; 
int hours = value/60; // 2 
int minutes = value % 60; // 1 

string strHours = hours.ToString(); 
string strMinutes = minutes.ToString(); 
+0

Mit TimeSpan ist der OO Weg, aber das ist kurz und süß. – spoulson

+0

Ich schaute in TimeSpan mit Reflector: alle Ergebnisse werden durch Multiplikation von Ticked Millisekunden gezählt. Ich glaube, dass meine Methode schneller sein kann! – abatishchev

8

Verwenden Sie eine Timespan-Struktur und ihre Parse Methode.

+0

Er sagte, er hatte eine Minute und wollte es in Streicher konvertieren, nicht umgekehrt. – froh42

+0

Zeitspanne ist immer noch der Weg zu gehen. –

1
int value = 121; 
int hours = value/60; 
int minutes = value % 60; 
+0

Warum der Downvote? Dies ist eine vollkommen gültige Methode, um Stunden/Minuten von einem Gesamtminutenwert zu erhalten und ist dasselbe wie die Antwort von abatishchev, außer für die .ToString() s – CraigTP

+0

+1, um die -1 – Davy8

+0

zu widerspiegeln, die ich -1 niemanden :) hatte –

0
int value = 121; 
TimeSpan timeSpan = TimeSpan.FromMinutes(value); 

// gives you the rounded down value of 2 
int hours = timeSpan.Hours; 

// gives you the minutes left of the hour 
int minutes = value - (hours * 60); 
+0

Warum nicht TimeSpan.Minutes hier verwenden? Dies wird in diesem Fall 1 zurückgeben, im Gegensatz zu TimeSpan.TotalMinutes, das 121 –

+0

zurückgibt. TotalMinutes gibt tatsächlich ein Double zurück, das 121.3523 oder eine Zahl zurückgeben könnte, wenn Sie einen Unterschied im Datum machen. Was, ja, würde auf 121 gecastet werden, wenn Sie auf einen Int32 werfen. TimeSpam.Minutes Ich habe nicht getestet. Aber wenn es "1" statt "121" zurückgibt, dann ist es das. – eduncan911