Obtenez le temps en millisecondes en utilisant C #
-
26-09-2019 - |
Question
Je fais un programme dans lequel je dois obtenir le temps en millisecondes. Par temps, je veux dire un nombre qui est égal à lui-même jamais, et est toujours 1000 numéros plus grand qu'il était il y a une seconde. J'ai essayé de convertir DateTime.Now
à un TimeSpan
et obtenir le TotalMilliseconds
ça ... mais je l'ai entendu ce n'est pas tout à fait exact.
Y at-il un moyen plus facile de le faire?
La solution
Utilisez la classe Stopwatch
.
Fournit un ensemble de méthodes et propriétés que vous pouvez utiliser pour mesurer avec précision le temps écoulé.
Il y a quelques bonnes informations sur la mise en œuvre ici:
Tests de performance: précis Run Time Mesures avec System.Diagnostics.Stopwatch
Autres conseils
long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
Il est en fait comment les différentes méthodes de conversion Unix sont mises en œuvre dans le DateTimeOffset
class (.NET Framework 4.6+, standard .NET 1.3 +):
long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
La propriété DateTime.Ticks
obtient le nombre de tiques qui représentent la date et l'heure.
10.000 tiques est d'une milliseconde (10,000,000 tiques par seconde).
Vous pouvez essayer la méthode native de QueryPerformanceCounter
. Voir http://www.pinvoke.net/default.aspx/kernel32/QueryPerformanceCounter .html pour plus d'informations. C'est ce que les utilisations de la classe Stopwatch
.
Voir Comment obtenir l'horodatage de précision de la tique dans .NET / C #? pour plus d'informations.
Stopwatch.GetTimestamp()
donne accès à cette méthode:
public static long GetTimestamp() {
if(IsHighResolution) {
long timestamp = 0;
SafeNativeMethods.QueryPerformanceCounter(out timestamp);
return timestamp;
}
else {
return DateTime.UtcNow.Ticks;
}
}
J'utilise la classe suivante. Je l'ai trouvé sur Internet une fois, émis l'hypothèse d'être le meilleur NOW () .
/// <summary>Class to get current timestamp with enough precision</summary>
static class CurrentMillis
{
private static readonly DateTime Jan1St1970 = new DateTime (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
/// <summary>Get extra long current timestamp</summary>
public static long Millis { get { return (long)((DateTime.UtcNow - Jan1St1970).TotalMilliseconds); } }
}
Source inconnue.
J'utilisé DateTime.Now.TimeOfDay.TotalMilliseconds (pour le jour en cours), espérons qu'il vous aidera aussi bien.
Utilisez System.DateTime.Now.ToUniversalTime()
. Cela met votre lecture dans un format milliseconde à base de référence connue qui élimine totalement le changement de jour, etc.