Je crée un programme dans lequel j'ai besoin d'obtenir l'heure en millisecondes. Par temps, je veux dire un nombre qui n'est jamais égal à lui-même, et qui est toujours 1000 nombres plus grand qu'il y a une seconde. J'ai essayé de convertir DateTime.Now
en a TimeSpan
et d'en tirer le résultat TotalMilliseconds
... mais j'ai entendu dire que ce n'était pas parfaitement précis.
Existe-t-il un moyen plus simple de le faire?
Réponses:
Utilisez la
Stopwatch
classe.Il y a de bonnes informations sur sa mise en œuvre ici:
Tests de performance: mesures précises du temps d'exécution avec System.Diagnostics.Stopwatch
la source
C'est en fait ainsi que les différentes méthodes de conversion Unix sont implémentées dans la
DateTimeOffset
classe (.NET Framework 4.6+, .NET Standard 1.3+):la source
DateTime.Now
n'est pas "mis à jour" très souvent), utilisez bien sûr à ladecimal milliseconds = DateTime.Now.Ticks / (decimal)TimeSpan.TicksPerMillisecond;
place.long
type de données devant les millisecondes. L'utilisationint
va certainement déborder.La
DateTime.Ticks
propriété obtient le nombre de graduations qui représentent la date et l'heure.10 000 tiques correspondent à une milliseconde (10 000 000 tiques par seconde).
la source
A single tick represents one hundred nanoseconds or one ten-millionth of a second. There are 10,000 ticks in a millisecond.
J'utilise la classe suivante. Je l'ai trouvé sur Internet une fois, supposé être le meilleur MAINTENANT () .
Source inconnue.
la source
Vous pouvez essayer la
QueryPerformanceCounter
méthode native. Voir http://www.pinvoke.net/default.aspx/kernel32/QueryPerformanceCounter.html pour plus d'informations. C'est ce que laStopwatch
classe utilise.Consultez Comment obtenir l'horodatage de la précision des graduations dans .NET / C #? pour plus d'informations.
Stopwatch.GetTimestamp()
donne accès à cette méthode:la source
Stopwatch.GetTimestamp()
fournit en fait l'accès à cette méthode.J'ai utilisé DateTime.Now.TimeOfDay.TotalMilliseconds (pour le jour actuel), j'espère que cela vous aidera également.
la source
Utilisez
System.DateTime.Now.ToUniversalTime()
. Cela met votre lecture dans un format de milliseconde basé sur des références qui élimine totalement le changement de jour, etc.la source