2013-07-30 30 views
38

Desidero convertire un'istanza DateTime in un'istanza TimeSpan, è possibile?Converti DateTime in TimeSpan

Mi sono guardato intorno ma non sono riuscito a trovare quello che voglio, trovo solo la differenza di orario. Più specificamente, voglio convertire un'istanza DateTime in millisecondi, per poi salvarla in un IsolatedStorage.

risposta

11

Per convertire un DateTime in un TimeSpan devi scegliere una data/ora di base, ad es. mezzanotte del 1 ° gennaio 2000 e sottrarla dal valore DateTime (e aggiungerla quando si desidera riconvertire in DateTime).

Se si desidera semplicemente convertire un numero DateTime in un numero, è possibile utilizzare la proprietà Ticks.

3

Nel caso in cui si utilizzi WPF e Xceed's TimePicker (che sembra utilizzare DateTime?) Come un raccoglitore di intervalli di tempo, come faccio ora, è possibile ottenere i millisecondi (o un TimeSpan) totale in questo modo:

var milliseconds = DateTimeToTimeSpan(timePicker.Value).TotalMilliseconds; 

    TimeSpan DateTimeToTimeSpan(DateTime? ts) 
    { 
     if (!ts.HasValue) return TimeSpan.Zero; 
     else return new TimeSpan(0, ts.Value.Hour, ts.Value.Minute, ts.Value.Second, ts.Value.Millisecond); 
    } 

XAML:

<Xceed:TimePicker x:Name="timePicker" Format="Custom" FormatString="H'h 'm'm 's's'" /> 

in caso contrario, penso che si potrebbe semplicemente adattare il mio DateTimeToTimeSpan() in modo che ci vuole anche 'giorni' in considerazione o fare sTH come dateTime.Substract(DateTime.MinValue).TotalMilliseconds.

13
TimeSpan.FromTicks(DateTime.Now.Ticks) 
+2

DateTime.TimeOfDay è meglio –

+7

Dipende. 'TimeOfDay' è solo il tempo e non include la data corrente nel' TimeSpan'. – KoalaBear

117

Si può semplicemente utilizzare la proprietà timeofday di data e ora, che è di tipo TimeSpan:

DateTime.TimeOfDay 

Questa proprietà è stato intorno dal .NET 1.1

Maggiori informazioni: http://msdn.microsoft.com/en-us/library/system.datetime.timeofday(v=vs.110).aspx

+2

Questa è una risposta molto migliore, grazie. – Jeremy

+2

DateTime.Now.TimeOfDay || DateTime.Today.TimeOfDay – espaciomore

+3

Per essere dolorosamente e troppo chiaro, dovresti usare "DateTime myDateTime = DateTime.UtcNow;" o qualsiasi altra cosa per ottenere qualcosa in un'istanza * specifica di 'DateTime' *, puoi usare **' myDateTime .TimeOfDay; '**. In alternativa, puoi ritirare l'intermediario e dire, ** 'DateTime.UtcNow.TimeOfDay' **, natch. (Ovvero, 'DateTime.TimeOfDay', il codice di esempio corrente, è" non valido "e non ti darà un valore allo stesso modo di" DateTime.UtcNow', che ha un senso. Hai bisogno di uno specifico 'DateTime' per prendi il suo valore 'TimeOfDay'.) – ruffin

2

Provare il seguente codice.

TimeSpan CurrentTime = DateTime.Now.TimeOfDay; 

ottenere il tempo della giornata e assegnarlo a TimeSpan variabile.