2012-01-26 14 views
43

Ho una vista dati nella mia applicazione che contiene i tempi di inizio e fine. Voglio calcolare il numero di minuti tra queste due volte. Finora ho ottenuto:Calcolo di quanti minuti ci sono tra due tempi

var varFinish = tsTable.Rows[intCellRow]["Finish Time"]; 
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
int intMinutes = TimeSpan.FromMinutes(varTime); 

Ma l'ultima riga non verrà compilato perché dice che sto usando argomenti non validi per il costruttore Timespan. Ho studiato un po 'su come calcolare il numero di minuti tra due volte, ma sto colpendo un po' un muro di mattoni. Qualcuno può consigliarmi sul modo migliore per raggiungere il mio obiettivo.

EDIT/

Ora il mio codice è il seguente:

var varFinish = tsTable.Rows[intCellRow]["Finish Time"]; 
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
int intMinutes = (int)varTime.TotalMinutes; 

Ma sto ottenendo un cast non valida sulla seconda riga. Sia varFinish che varValue sono tempi per es. 10:00 e 8:00 dicono. Quindi non sei sicuro del motivo per cui non scriveranno per digitare DateTime?

+0

Se varFinish è una stringa, non puoi lanciare una stringa a un DateTime. È necessario utilizzare DateTime.Parse (...). Anche allora, implicherà la data odierna se non ci sono date in varFinish. – Jim

risposta

70

Prova questa

DateTime startTime = varValue 

DateTime endTime = varTime 

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); 
+2

Questa è una buona risposta, ma fornisce * 0 * su span.Minutes quando la differenza tra due tempi è maggiore di 1 ora (cioè 60 minuti o più) –

+6

@MalikAsif. Ho appena provato questo con un intervallo di 61 minuti e ottengo 1 ora e 1 minuto, come previsto. Se lo span era esattamente 60 minuti, allora sì, i minuti sarebbero zero. Stavi pensando a 'TotalMinutes()'? – Jim

+1

Sì @ Jim esattamente, questo è quello di cui stavo parlando. Il punto citato è che la domanda riguardava il numero totale di minuti. –

8

Nel codice della domanda si sta utilizzando TimeSpan.FromMinutes in modo errato. Si prega di consultare la MSDN Documentation per TimeSpan.FromMinutes, che dà il metodo la seguente firma:

public static TimeSpan FromMinutes(double value) 

quindi, il seguente codice non viene compilato

var intMinutes = TimeSpan.FromMinutes(varTime); // won't compile 

Invece, è possibile utilizzare la proprietà TimeSpan.TotalMinutes per eseguire questa aritmetica. Per esempio:

TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
double fractionalMinutes = varTime.TotalMinutes; 
int wholeMinutes = (int)fractionalMinutes; 
30
double minutes = varTime.TotalMinutes; 
int minutesRounded = (int)Math.Round(varTime.TotalMinutes); 

TimeSpan.TotalMinutes: Il numero totale di minuti rappresentata da questa istanza.

+2

Sì TotalMinutes è quello che stavo cercando. Grazie mille^_^ –

2

Cosa c'è che non va con varTime.TotalMinutes? :)

1

Se la differenza tra endTime e startTime è maggiore o uguale a 60 minuti, la dichiarazione: endTime.Subtract(startTime).Minutes; restituirà sempre (minutesDifference % 60). Ovviamente che non è desiderato quando parliamo solo di minuti (non di ore qui).
Ecco alcuni dei modi, se si desidera ottenere total number of minutes (in diverse typecasts):

// Default value that is returned is of type *double* 
double double_minutes = endTime.Subtract(startTime).TotalMinutes; 
int integer_minutes = (int)endTime.Subtract(startTime).TotalMinutes; 
long long_minutes = (long)endTime.Subtract(startTime).TotalMinutes; 
string string_minutes = (string)endTime.Subtract(startTime).TotalMinutes; 
Problemi correlati