Conversione da TimeSpan a DateTime

Voglio convertire un periodo di tempo in data / ora. Come posso fare questo?

Ho trovato un metodo su Google:

DateTime dt; TimeSpan ts="XXX"; //We can covnert 'ts' to 'dt' like this: dt= Convert.ToDateTime(ts.ToString()); 

C’è un altro modo di fare questo?

Non è molto logico convertire TimeSpan in DateTime. Cerca di capire cosa ha detto leppie sopra. TimeSpan è una durata che indica 6 giorni 5 ore e 40 minuti. Non è un appuntamento. Se dico 6 giorni; Puoi dedurre una data da essa? La risposta è NO a meno che tu non abbia una DATA DI RIFERIMENTO.

Quindi se vuoi convertire TimeSpan in DateTime hai bisogno di una data di riferimento. 6 giorni e 5 ore da quando? Quindi puoi scrivere qualcosa del genere:

  DateTime dt = new DateTime(2012, 01, 01); TimeSpan ts = new TimeSpan(1, 0, 0, 0, 0); dt = dt + ts; 

Mentre la risposta selezionata è rigorosamente corretta, credo di capire cosa sta cercando di ottenere l’OP qui perché ho avuto un problema simile.

Avevo un TimeSpan che desideravo visualizzare in un controllo di griglia (come solo hh: mm) ma la griglia non sembrava comprendere TimeSpan, solo DateTime. L’OP ha uno scenario simile in cui solo TimeSpan è la parte rilevante, ma non ha considerato la necessità di aggiungere il punto di riferimento DateTime.

Quindi, come indicato sopra, ho semplicemente aggiunto DateTime.MinValue (anche se qualsiasi data lo farà) che viene successivamente ignorato dalla griglia quando restituisce l’intervallo di tempo come porzione temporale della data risultante.

Hai bisogno di una data di riferimento per questo per essere utile.

Un esempio da http://msdn.microsoft.com/en-us/library/system.datetime.add.aspx

 // Calculate what day of the week is 36 days from this instant. System.DateTime today = System.DateTime.Now; System.TimeSpan duration = new System.TimeSpan(36, 0, 0, 0); System.DateTime answer = today.Add(duration); System.Console.WriteLine("{0:dddd}", answer); 

TimeSpan può essere aggiunto a un nuovo DateTime per raggiungere questo objective.

 TimeSpan ts="XXX"; DateTime dt = new DateTime() + ts; 

Ma come detto prima, non è strettamente logico senza una data di inizio valida. Ho incontrato un caso d’uso in cui ho richiesto solo l’aspetto del tempo. funzionerà bene finché la logica è corretta.

Se è necessario solo mostrare il valore temporale in un datagrid o un’etichetta simile, il modo migliore è convertire direttamente l’ora nel tipo di dati datetime.

SELEZIONA CONVERT (datetime, myTimeField) come myTimeField FROM Table1

 var StartTime = new DateTime(item.StartTime.Ticks); 

Puoi anche usare DateTime.FromFileTime (finishTime) dove finishTme è un lungo contenente i tick di un tempo. Oppure FromFileTimeUtc.

Un metodo semplice, usa le zecche:

 new DateTime((DateTime.Now - DateTime.Now.AddHours(-1.55)).Ticks).ToString("HH:mm:ss:fff") 

Questa funzione ti darà una data (senza giorno / mese / anno)

Un problema con quanto sopra è che la conversione restituisce il numero errato di giorni specificato nel TimeSpan.
Usando quanto sopra, il sotto restituisce 3 e non 2.

Idee su come conservare i 2 giorni negli argomenti di TimeSpan e restituirli come giorno DateTime?

 public void should_return_totaldays() { _ts = new TimeSpan(2, 1, 30, 10); var format = "dd"; var returnedVal = _ts.ToString(format); Assert.That(returnedVal, Is.EqualTo("2")); //returns 3 not 2 } 

Innanzitutto, converti l’intervallo di tempo in una stringa, quindi in DateTime, quindi torna a una stringa:

 Convert.ToDateTime(timespan.SelectedTime.ToString()).ToShortTimeString();