Comment fonctionne exactement DateTime.Now.Ticks?

Dans mon application, je génère des fichiers à des occasions aléatoires. Pour assurer une dénomination unique, j’ai essayé d’utiliser les nano secondes depuis le 1.1.1970:

long time = DateTime.Now.Ticks; Ssortingng fileName = Convert.ToSsortingng(time); Console.WriteLine(fileName); 

Maintenant, j’ai observé quelque chose de bizarre. Pourquoi la sortie est comme ça? Je veux dire pourquoi les 4 derniers chiffres sont toujours les mêmes? Je peux l’utiliser comme un nom de fichier, ce n’est pas le problème, mais je me pose la question.

 634292263478068039 634292263512888039 634292263541368039 634292263603448039 634292263680078039 

La résolution de DateTime.Now dépend de la timer de votre système (~ 10ms sur le système d’exploitation Windows actuel) … il y a donc la même valeur de fin (cela ne compte pas plus que ça).

Pas vraiment une réponse à votre question comme demandé, mais j’ai pensé que je devrais parler de votre objective général.

Il existe déjà une méthode pour générer des noms de fichiers aléatoires dans .NET.

Voir System.Path.GetTempFileName et GetRandomFileName .

Il est également courant d’utiliser un GUID pour nommer des fichiers aléatoires.

Vous pouvez obtenir les millisecondes depuis le 1/1/1970 en utilisant un tel code:

 private static DateTime JanFirst1970 = new DateTime(1970, 1, 1); public static long getTime() { return (long)((DateTime.Now.ToUniversalTime() - JanFirst1970).TotalMilliseconds + 0.5); } 

J’avais un problème similaire.

Je voudrais également regarder cette réponse: Existe – t-il un object DateTime haute résolution (microseconde, nanoseconde) disponible pour le CLR? .

À propos de mi-chemin est une réponse par “Robert P” avec certaines fonctions d’extension que j’ai trouvé utile.

convertir le datetime actuel en nom de fichier pour enregistrer les fichiers que vous pouvez utiliser

DateTime.Now.ToFileTime()

cela devrait résoudre votre objective