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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top