web-dev-qa-db-fra.com

Obtenez du temps en millisecondes en utilisant C #

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?

109
Entity

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

76
RedFilter
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();
273
Evan Mulawski

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).

13
Itay Karo

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;
     }
 }
8
Pieter van Ginkel

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.

7
schmijos

J'ai utilisé DateTime.Now.TimeOfDay.TotalMilliseconds (pour le jour actuel), j'espère que cela vous aidera également.

5
Sarvan

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.

1
John Tobler