Je crée un programme dans lequel je dois obtenir le temps en millisecondes. Par temps, j'entends un nombre qui n'est jamais égal à lui-même et qui est toujours 1000 plus grand qu'il ne l'était il y a une seconde. J'ai essayé de convertir DateTime.Now
en TimeSpan
et d'obtenir le TotalMilliseconds
à partir de cela ... mais j'ai entendu dire que ce n'était pas parfaitement exact.
Y a-t-il un moyen plus facile de faire cela?
Utilisez la classe Stopwatch
.
Fournit un ensemble de méthodes et de 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 performances: mesures de temps d'exécution précises avec System.Diagnostics.Stopwatch
long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
C’est ainsi que les différentes méthodes de conversion Unix sont implémentées dans la classe DateTimeOffset
(.NET Framework 4.6+, .NET Standard 1.3+):
long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
La propriété DateTime.Ticks
obtient le nombre de ticks représentant la date et l'heure.
10 000 ticks est une milliseconde (10 000 000 ticks par seconde).
Vous pouvez essayer la méthode native QueryPerformanceCounter
. Voir http://www.pinvoke.net/default.aspx/kernel32/QueryPerformanceCounter.html pour plus d'informations. C'est ce que la classe Stopwatch
utilise.
Voir Comment obtenir l’horodatage de la précision des ticks 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, postulé comme étant 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'ai utilisé DateTime.Now.TimeOfDay.TotalMilliseconds (pour le jour actuel), j'espère que cela vous aidera également.
Utilisez System.DateTime.Now.ToUniversalTime()
. Cela met votre lecture dans un format milliseconde basé sur la référence connu qui élimine totalement les changements de jour, etc.