web-dev-qa-db-fra.com

Comment puis-je convertir un DateTime en un int?

J'ai le DateTime suivant 25/04/2011 5:12:13 PM et j'ai essayé de le convertir en int

 int result = dateDate.Year * 10000 + dateDate.Month * 100 
             + dateDate.Day + dateDate.Hour + dateDate.Minute + dateDate.Second;

Mais il faut toujours 2011425, comment puis-je avoir le temps aussi?

36
someguy
dateDate.Ticks

devrait vous donner ce que vous cherchez.

La valeur de cette propriété représente le nombre d'intervalles de 100 nanosecondes qui se sont écoulés depuis 12:00:00 le 1er janvier 0001 à minuit. représente DateTime.MinValue. Cela fait n'inclut pas le nombre de ticks qui sont attribuables à des secondes intercalaires.

DateTime.Ticks


Si vous cherchez vraiment le temps de l'époque Linux (secondes depuis le 1er janvier 1970), la réponse acceptée pour this question devrait être pertinente.


Mais si vous essayez réellement de "compresser" une représentation sous forme de chaîne de la date en un entier, vous devriez vous demander pourquoi vous ne la stockez pas simplement en tant que chaîne. Si vous voulez toujours le faire après cela, la réponse de Stecya est la bonne. Gardez à l'esprit qu'il ne rentre pas dans un int, vous devrez en utiliser un long.

55
Alex J
long n = long.Parse(date.ToString("yyyyMMddHHmmss"));

voir Chaînes de format de date et heure personnalisées

44
Stecya

Je pense que vous voulez (cela ne rentre pas dans une int cependant, vous devrez le stocker comme une long):

long result = dateDate.Year * 10000000000 + dateDate.Month * 100000000 + dateDate.Day * 1000000 + dateDate.Hour * 10000 + dateDate.Minute * 100 + dateDate.Second;

Alternativement, stocker les tiques est une meilleure idée.

5
Jackson Pope

Voulez-vous un "int" qui ressemble à 20110425171213? Dans ce cas, vous feriez mieux d'utiliser ToString avec le format approprié (quelque chose comme "yyyyyMMddHHmmss"), puis de convertir la chaîne en un entier (ou en un long, unsigned int car il sera bien plus que 32 bits). 

Si vous voulez une valeur numérique réelle (le nombre de secondes depuis l'année 0), le calcul est très différent, par ex. 

result = second
result += minute * 60
result += hour * 60 * 60
result += day * 60 * 60 * 24 

etc. 

Mais vous feriez mieux d'utiliser des tiques. 

2
Unsliced
string date = DateTime.Now.ToString();

date = date.Replace("/", "");
date = date.Replace(":", "");
date = date.Replace(" ", "");
date = date.Replace("AM", "");
date = date.Replace("PM", "");            
return date;
0
l1k0pl4st1