Comment puis-je construire exactement un horodatage du temps réel avec une précision en millisecondes?
J'ai besoin de quelque chose comme 16.4.2013 9: 48: 00: 123. Est-ce possible? J'ai une application, où j'échantillonne des valeurs 10 fois par seconde, et je dois les montrer dans un graphique.
c#
datetime
precision
milliseconds
LuckyHK
la source
la source
hh
pendant des heures (heure standard). Dans le cas d'un horodatage (et dans de nombreux autres cas), celui-ci devrait probablement être associé àtt
(am / pm) ou remplacé parHH
(heure militaire).Réponses:
Je suppose que vous voulez dire une précision en millisecondes .
DateTime
a beaucoup de précision, mais est assez grossier en termes de précision. D'une manière générale, vous ne pouvez pas. Habituellement, l'horloge système (d'oùDateTime.Now
proviennent ses données) a une résolution d'environ 10 à 15 ms. Voir le blog d' Eric Lippert sur la précision et l'exactitude pour plus de détails.Si vous avez besoin d'un timing plus précis que cela, vous voudrez peut-être envisager d'utiliser un client NTP.
Cependant, il n'est pas clair que vous ayez vraiment besoin d'une précision en millisecondes ici. Si vous ne vous souciez pas du timing exact - vous voulez juste montrer les échantillons dans le bon ordre, avec une précision "assez bonne", alors l'horloge du système devrait être correcte. Je vous conseille d'utiliser
DateTime.UtcNow
plutôt que deDateTime.Now
bien, pour éviter les problèmes de fuseau horaire autour des transitions d'heure d'été, etc.Si votre question est en fait simplement convertir autour
DateTime
d'une chaîne avec une précision milliseconde, je suggère d' utiliser:(Notez que contrairement à votre échantillon, cela est triable et moins susceptible de créer de la confusion quant à savoir s'il est censé être "mois / jour / année" ou "jour / mois / année".)
la source
DateTime.UtcNow
plusieurs reprises, cela n'augmente-t-il qu'une fois par seconde? Vous ne l'avez pas montré.)Cela devrait fonctionner:
Si vous n'avez pas besoin qu'il soit affiché et que vous ayez juste besoin de connaître le décalage horaire, ne le convertissez pas en chaîne. Laissez-le comme,
DateTime.Now();
Et utilisez
TimeSpan
pour connaître la différence entre les intervalles de temps:Exemple
la source
Je cherchais une solution similaire, basée sur ce qui a été suggéré sur ce fil, j'utilise ce qui suit
DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss.fff")
, et cela fonctionne comme un charme. Remarque: ce.fff
sont les nombres de précision que vous souhaitez capturer.la source
HH
(heure militaire) ou ajouteztt
(PM ou AM). Comme le montre cet exemple: repl.it/KGr3/1Utilisez la structure DateTime avec des millisecondes et un format comme celui-ci:
la source
La réponse de Pyromancer me semble plutôt bonne, mais peut-être que vous vouliez:
Mais si vous comparez des dates, TimeSpan est le chemin à parcourir.
la source
TotalMilliseconds
. Millisecondes contient le compteur Millisecondes actuel, qui n'est jamais supérieur à 1000, tandis que TotalMilliseconds contient le total des millisecondes écoulées depuis l'époque.Si vous voulez toujours une date au lieu d'une chaîne comme les autres réponses, ajoutez simplement cette méthode d'extension.
la source
Pour autant que je comprends la question, vous pouvez opter pour:
Cela coupera les tiques inférieures à 1 milliseconde.
la source
Le problème avec
DateTime.UtcNow
etDateTime.Now
est que, selon l'ordinateur et le système d'exploitation, il peut n'être précis qu'entre 10 et 15 millisecondes. Cependant, sur les ordinateurs Windows, on peut utiliser la fonction de bas niveau GetSystemTimePreciseAsFileTime pour obtenir une précision en microsecondes, voir la fonctionGetTimeStamp()
ci-dessous.la source
essayez d'utiliser datetime.now.ticks. cela fournit une précision en nanosecondes. prendre le delta de deux ticks (stoptick - starttick) / 10,000 est la milliseconde de l'intervalle spécifié.
https://docs.microsoft.com/en-us/dotnet/api/system.datetime.ticks?view=netframework-4.7.2
la source
Si vous voulez des microsecondes, passez simplement
10000
à10
, et si vous voulez le 10e de micro, supprimez/ 10000
.la source
DateTime.Now.ToString ("ddMMyyyyhhmmssffff")
la source