2012-05-10 55 views
30

Ho due date, una in meno rispetto all'altra. Voglio creare una stringa come questaGiorni, ore, minuti, secondi tra due date

"0 giorni, 0 ore, 23 minuti, 18 secondi"

che rappresentano la differenza tra le due date. Come posso ottenere questi elementi di questa stringa?

+1

grazie ragazzi - Vorrei poter accettare tutte le vostre risposte, ma non è permesso quindi ho svalutato tutte le vostre risposte. –

risposta

70

TimeSpan è l'oggetto necessario:

TimeSpan span = (DateTime.Now - DateTime.Now); 

String.Format("{0} days, {1} hours, {2} minutes, {3} seconds", 
    span.Days, span.Hours, span.Minutes, span.Seconds); 
+0

ma questo mi darà giorni, ore, minuti e secondi? –

+2

http://msdn.microsoft.com/en-us/library/system.timespan.aspx –

+0

usa solo span.Days, span.Hours ecc ... –

9

Quando si sottrarre uno DateTime da un altro, si ottiene un'istanza TimeSpan che espone tali valori.

TimeSpan diff = DateTime.Now - DateTime.Today; 
string formatted = string.Format(
         CultureInfo.CurrentCulture, 
         "{0} days, {1} hours, {2} minutes, {3} seconds", 
         diff.Days, 
         diff.Hours, 
         diff.Minutes, 
         diff.Seconds); 
2

Hai provato a usare

TimeSpan() 

che può certamente fare quello che vuoi

3

Utilizzare un periodo

DateTime startTime = DateTime.Now; 

DateTime endTime = DateTime.Now.AddSeconds(75); 

TimeSpan span = endTime.Subtract (startTime); 
Console.WriteLine("Time Difference (seconds): " + span.Seconds); 
Console.WriteLine("Time Difference (minutes): " + span.Minutes); 
Console.WriteLine("Time Difference (hours): " + span.Hours); 
Console.WriteLine("Time Difference (days): " + span.Days); 

String yourString = string.Format("{0} days, {1} hours, {2} minues, {3} seconds", 
    span.Days, span.Hours, span.Minutes, span.Seconds); 
1

Che ne dici di qualcosa del genere?

TimeSpan diff = dateTimeNew - dateTimeOld; 
    string output = string.Format("{0} days, {1} hours, {2} minues, {3} seconds", diff.Days, diff.Hours, diff.Minutes, diff.Seconds); 
    Console.WriteLine(output); 
2
DateTime myDay = DateTime.Now; 
    DateTime otherDate = DateTime.Now.AddYears(1); 
    var test = otherDate.Subtract(myDay); 
    Console.WriteLine("Days:" + test.Days + "Hours:" + test.Hours +"Minutes" + test.Minutes +"Seconds" + test.Seconds); 

Ecco test è di tipo timestamp

+2

Giusto per evitare confusione, _.TotalSeconds_ restituirà il ** numero totale ** di secondi, quindi un intervallo di 1 ora restituirà 3.600 secondi totali. La proprietà _.Seconds_ restituirà 0 secondi poiché non vi sono "rimanenti" in un intervallo di 1 ora. – CodeHxr

+1

@CodeHxr, a destra. Ho intenzione di aggiornarlo – Habib

3

Utilizzare la classe TimeSpan, che si otterrà quando si sottrae le date.

È possibile formattare l'output utilizzando le stringhe di formato o custom.

"0 giorni, 0 ore, 23 minuti, 18 secondi"

può essere avuto con qualcosa di simile:

TimeSpan ts = DateTime.Now - DateTime.Today; 
Console.WriteLine(
    string.Format("{0:%d} days, {0:%h} hours, {0:%m} minutes, {0:%s} seconds", ts) 
); 

IMO, è più pulito e più facile da usare string.Format invece di dover sfuggire le parole nella stringa di formato (che ti servirà se hai appena usato .ToString) o costruirlo manualmente.

1
TimeSpan diffTime = dateTimeNew -PreviousDate; 
int days=diffTime.Days; 
int hours=diffTime.Hours; 
int minutes=diffTime.Minutes; 
int seconds=diffTime.Seconds; 
+0

OP vuole costruire una stringa dal risultato del calcolo. Quella parte manca dalla tua risposta. – kRiZ

2

Non dimenticare che se si desidera che questo calcolo sia portatile, è necessario archiviarlo come UTC e quindi visualizzarlo convertirlo in ora locale. Come regola generale, memorizzare le date come UTC e convertirle in ora locale per la presentazione.

Problemi correlati