2010-03-05 5 views
9

Ho provato a cercare here, ma non poteva aiutarmi tanto ..
voglio convertire time_span a stringa, io non voglio tornare al periodo in giorni .. ma solo hh: mm: ss. Come raggiungerlo?come ottenere un intervallo di tempo per la conversione delle stringhe?

mio codice di esempio è qui:

   String time_span_par = "06:12:40"; 
       String time_str = "18:13:59"; 
       TimeSpan time_span_var = TimeSpan.Parse(time_span_par); 
       TimeSpan time_span = TimeSpan.Parse(time_str); 

       time_span = time_span.Add(time_span_var); 
       string temp = time_span.ToString("HH:mm:ss"); 
+0

Ciò significa che si desidera aggiungere 18 ore a 6 ore? Non sarebbe un altro giorno allora? – shahkalpesh

+0

Ya ma non voglio il giorno .. 0 ore è sufficiente per essere visualizzato .. –

risposta

17

Provare a utilizzare

DateTime d = new DateTime(time_span.Ticks); 
string time = d.ToString("HH:mm:ss"); 
+0

ciao @astander, la tua risposta è accettabile anche io .. Ma personalmente mi piaceva il codice di una sola linea .. –

+5

@infant programmatore, questo può essere anche one-liner, è possibile combinare le due espressioni in una riga: 'string time = new DateTime (time_span.Ticks) .ToString (" HH: mm: ss ");' – CMS

+0

@cms, ok .. quindi accettato . Stavo solo evitando la dichiarazione di un'altra variabile. –

6

Questo dovrebbe funzionare:

string temp = string.Format("{0}:{1}:{2}", 
    time_span.Hours.ToString(), time_span.Minutes.ToString(), 
    time_span.Seconds.ToString()); 

Come da commento, se si desidera che le due cifre si potrebbe fare:

string temp = string.Format("{0}:{1}:{2}", 
    time_span.Hours.ToString("00"), time_span.Minutes.ToString("00"), 
    time_span.Seconds.ToString("00")); 

Modificato: come da commento di jimmy,

string temp = string.Format("{0:00}:{1:00}:{2:00}",time_span.Hours, time_span.Minutes, time_span.Seconds); 
+2

Questo non ti darà cose come "1: 2: 6" per <10 porzioni? –

+1

Sì, sarà :) Aggiunta la formattazione per le doppie cifre. – Kelsey

+2

string.Format ("{0:00}: {1:00}: {2:00}", time_span.Hours, time_span.Minutes, time_span.Seconds); – Jimmy

1

semplicemente convertire il valore di zecche in un DateTime e quindi utilizzare la sua ToString()

var date1 = DateTime.Now; 
var date2 = DateTime.Now.AddSeconds(-1000); 
var diff = date1 - date2; 
var temp = new DateTime(diff.Ticks).ToString("HH:mm:ss") 
+0

+1, grazie per la risposta, –

3

Prova questo:

time_span = time_span.Add(time_span_var); 
    string temp = time_span.ToString(); 
    temp = string.Format("{0}:{1}:{2}", time_span.TotalHours, time_span.TotalMinutes, time_span.TotalSeconds); 

E dit Dopo aver letto il tuo commento sulla tua domanda, cioè hai bisogno di visualizzare zero ore per i nuovi giorni, la mia risposta ti darà ore, minuti e secondi totali, non quello che vuoi.

(+1) Kelseys;)

+1

Non è possibile utilizzare "TotalHours'," TotalMinutes', ecc. In quanto sono calcolati in modo indipendente e includono tutto il valore. Anche solo facendo un ToString() sulle uscite temporali: '1.00: 26: 3' dove esce la mia versione:' 00: 26: 39'. – Kelsey

+0

Grazie Kelsey;) La tua risposta è davvero la migliore per la sua domanda. Ho modificato la mia risposta sopra prima che la mia pagina venisse aggiornata con il tuo commento. Comunque grazie. –

1
String time_span_par = "06:12:40"; 
String time_str = "18:13:59"; 
TimeSpan time_span_var = TimeSpan.Parse(time_span_par); 
TimeSpan time_span = TimeSpan.Parse(time_str); 

TimeSpan finalTime = (time_span_var + time_span); 
Console.WriteLine(finalTime); 
Console.WriteLine(finalTime - TimeSpan.FromHours(finalTime.Days * 24)); 
+0

Impressionante .. :-) +1 –

3

Il codice che ho implementato è:

  string temp = DateTime.Today.Add(time_span).ToString("HH:mm:ss"); 

originariamente postato da Marc Gravell,

+0

perché hai implementato una risposta e ne hai accettata una diversa? – Jimmy

+0

Questa non è la mia risposta .. quindi non voglio prendere il merito, e inoltre mi piacerebbe valutare gli altri aiutando l'atteggiamento e lo sforzo fatto .. :-) –

+0

E anche la soluzione accettata vale la pena di implementare .. –

0

Se il numero di giorni è irrilevante allora si avere la soluzione, tuttavia mi sono imbattuto in questa risposta alla ricerca di una conversione che ha dato ore in totale, quindi 36 ore dovrebbero essere visualizzate come 36:00:00. Utilizzando alcuni dei suggerimenti di cui sopra questo è ciò che mi si avvicinò con:

SomeLabel.Text = Math.Floor(ts.TotalHours).ToString() + ":" + ts.Minutes.ToString("D2") + ":" + ts.Seconds.ToString("D2"); 

Ore totali è sempre arrotondato per difetto, i minuti ei secondi sono riempite di essere 2 cifre (00 - 09)

3

C'è una molto più modo più semplice per farlo ora (anche se si usa solo il framework 4), è sufficiente utilizzare la stringa letteralmente e puoi farlo direttamente sull'istanza di TimeSpan.

time_span.ToString(@"hh\:mm\:ss") 

che sarà in uscita

00:26:39 

Utile ora la gente inciampo in questo (come me).

Cheers :)

Problemi correlati