web-dev-qa-db-fra.com

Convertissez DateTime en long et en sens inverse

Je veux stocker les dates sous forme de nombres dans un tableau. Je sais comment faire cela mais je ne sais pas comment y retourner. Comment puis-je transtyper une variable longue en ToDateTime.

DateTime now = DateTime.Now;
long t = now.ToFileTime();
DateTime today = t.ToDateTime;  // I am looking for something like this line. This Method does not exist

Je sais qu'il existe de nombreuses façons de convertir DateTime en long. La technique à utiliser ne me dérange pas. Je veux juste avoir un moyen de me convertir d'avant en arrière. 

33
Tono Nam

Pour prolonger de DateTime:

long DateTime.Ticks

À date et heure de long:

new DateTime(long)

82
abatishchev
11

De long à DateTime: new DateTime(long ticks)

De DateTime à long: DateTime.Ticks

9
Jamie

Puisque vous utilisez ToFileTime, vous voudrez utiliser FromFileTime pour faire l’inverse. Mais note :

Ordinairement, la méthode FromFileTime restaure une valeur DateTime qui était enregistré par la méthode ToFileTime . Cependant, les deux valeurs peuvent différer dans les conditions suivantes:

Si la sérialisation et la désérialisation de la valeur DateTime se produisent dans des fuseaux horaires différents. Pour Par exemple, si une valeur DateTime avec un heure de 12h30 aux États-Unis d’Est Le fuseau horaire est sérialisé, puis désérialisé à l’heure du Pacifique zone, la valeur initiale de 12h30 P.M . est ajusté à 9h30. refléter la différence entre les deux fois zones.

Si la valeur DateTime sérialisée représente une heure non valide dans le fuseau horaire local. Dans ce cas, la méthode ToFileTime ajuste le valeur DateTime restaurée afin qu'elle représente une heure valide dans le local fuseau horaire.

Si vous ne vous souciez pas de savoir quelle représentation long d'une DateTime est stockée, vous pouvez utiliser Ticks comme d'autres l'ont suggéré (Ticks est probablement préférable, selon vos besoins, car la valeur renvoyée par ToFileTime semble être dans le contexte de l’API du système de fichiers Windows).

5
Dan J

Il y a plusieurs possibilités (notez que ces valeurs longues ne sont pas identiques à celles de l'époque Unix).

Pour votre exemple (pour inverser ToFileTime()), utilisez simplement DateTime.FromFileTime(t).

3
Mario

Il existe un constructeur DateTime qui prend beaucoup de temps.

DateTime today = new DateTime(t); // where t represents long format of dateTime 
0
Adam Lamer
   long dateTime = DateTime.Now.Ticks;
   Console.WriteLine(dateTime);
   Console.WriteLine(new DateTime(dateTime));
   Console.ReadKey();
0
Jaydeep Shil