web-dev-qa-db-fra.com

Conversion TimeSpan en DateTime

Je veux convertir un intervalle de temps en date/heure. Comment puis-je faire ceci?

J'ai trouvé une méthode sur Google:

DateTime dt;
TimeSpan ts="XXX";

//We can covnert 'ts' to 'dt' like this:

dt= Convert.ToDateTime(ts.ToString());

Y a-t-un autre moyen de faire ça?

56
Raghav55

Il n’est pas très logique de convertir TimeSpan en DateTime. Essayez de comprendre ce que leppie a dit ci-dessus. TimeSpan est une durée de 6 jours 5 heures 40 minutes. Ce n'est pas une date. Si je dis 6 jours; Pouvez-vous en déduire une date? La réponse est NON sauf si vous avez une date de référence. 

Donc, si vous voulez convertir TimeSpan en DateTime, vous avez besoin d’une date de référence. 6 jours et 5 heures à partir de quand? Donc, vous pouvez écrire quelque chose comme ceci:

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

Bien que la réponse choisie soit tout à fait correcte, je pense comprendre ce que le PO essaie de faire ici car j'avais un problème similaire.

J'avais un TimeSpan que je souhaitais afficher dans un contrôle de grille (uniquement hh: mm) mais la grille ne semblait pas comprendre TimeSpan, mais uniquement DateTime. Le scénario opérationnel du PO est similaire: seul le composant TimeSpan constitue la partie pertinente, mais n'a pas pris en compte la nécessité d'ajouter le point de référence DateTime.

Ainsi, comme indiqué ci-dessus, j'ai simplement ajouté DateTime.MinValue (bien que n'importe quelle date convienne), ce qui est par la suite ignoré par la grille lorsqu'elle restitue la plage horaire comme partie de la date obtenue.

30
Mike

TimeSpan peut être ajouté à un nouveau DateTime pour y parvenir.

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

Mais comme mentionné précédemment, ce n'est pas strictement logique sans une date de début valide. J'ai rencontré Un cas d'utilisation où je n'avais besoin que de l'aspect temporel. fonctionnera bien tant que la logique est correcte.

9
Tony Thomas

Vous avez besoin d’une date de référence pour que cela soit utile.

Un exemple de 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);  
8
NaN

Si vous devez uniquement afficher la valeur de l'heure dans une grille de données ou une étiquette similaire, le meilleur moyen consiste à convertir directement l'heure en type de données datetime.

SELECT CONVERT (date/heure, myTimeField) en tant que myTimeField FROM Table1

0
Paolo

Vous pouvez également utiliser DateTime.FromFileTime (finishTime) où finishTme est un long contenant les graduations d'une heure. Ou FromFileTimeUtc. 

0
user2825546
var StartTime = new DateTime(item.StartTime.Ticks);
0
Arun Prasad E S