Comprendre les limites de précision de C# DateTime.Now
Le problème :
Pourquoi DateTime.Now
/UtcNow
renvoie-t-il souvent des horodatages apparemment imprécis, affichant fréquemment des valeurs identiques sur plusieurs millisecondes ? La précision de DateTime.Now
est-elle explicitement définie ?
La réponse :
DateTime
n'est pas destiné à une mesure du temps de haute précision. Sa fonction principale est la représentation et la manipulation de la date et de l'heure pour des applications typiques telles que les interfaces utilisateur et les calculs basés sur la date.
Détails techniques :
La précision et l'exactitude sont distinctes. Une horloge peut être précise (cohérente dans les intervalles de mesure) mais inexacte (hors d'une source de temps de référence). Fournir une précision à la microseconde en DateTime
serait trompeur, car la plupart des systèmes n'ont pas accès à des signaux horaires suffisamment précis.
Implications :
L'imprécision inhérente de DateTime.Now
le rend inadapté aux scénarios exigeant un timing de haute précision. Pour de telles tâches, la classe Stopwatch
est de loin supérieure. DateTime
offre une précision adéquate pour les opérations courantes de date et d'heure telles que l'affichage de l'heure actuelle ou le calcul des différences horaires.
Exemple illustratif :
Ce code met en évidence la différence entre DateTime.Now
et Stopwatch
dans la mesure du temps :
<code class="language-csharp">using System; using System.Diagnostics; public class Program { public static void Main(string[] args) { var stopwatch = new Stopwatch(); stopwatch.Start(); for (int i = 0; i < 1000; i++) { Console.WriteLine($"DateTime.Now: {DateTime.Now.Millisecond}, Stopwatch: {stopwatch.ElapsedMilliseconds}"); // Add a small delay (adjust as needed) System.Threading.Thread.Sleep(1); } stopwatch.Stop(); } }</code>
Cela démontre que DateTime.Now
peut générer à plusieurs reprises la même valeur en millisecondes sur de courtes périodes, tandis que Stopwatch
offre une mesure du temps écoulé plus granulaire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!