Wie kann ich einen Zeitstempel der tatsächlichen Zeit mit Millisekundengenauigkeit genau erstellen?
Ich brauche so etwas wie 16.4.2013 9: 48: 00: 123. Ist das möglich? Ich habe eine Anwendung, in der ich 10 Mal pro Sekunde Werte abtastet und diese in einem Diagramm anzeigen muss.
c#
datetime
precision
milliseconds
LuckyHK
quelle
quelle
hh
stundenlang verwendet werden (Standardzeit). Im Falle eines Zeitstempels (und in vielen anderen Fällen) sollte dieser wahrscheinlich mittt
(am / pm) gepaart oder durchHH
(Militärzeit) ersetzt werden.Antworten:
Ich vermute , Sie Millisekunden bedeuten Genauigkeit .
DateTime
hat viel Präzision, ist aber in Bezug auf die Genauigkeit ziemlich grob. Im Allgemeinen können Sie nicht. Normalerweise hat die Systemuhr (von der dieDateTime.Now
Daten stammen) eine Auflösung von ca. 10-15 ms. Weitere Informationen finden Sie in Eric Lipperts Blogbeitrag über Präzision und Genauigkeit .Wenn Sie ein genaueres Timing benötigen, sollten Sie einen NTP-Client verwenden.
Es ist jedoch nicht klar, dass Sie hier wirklich eine Millisekundengenauigkeit benötigen. Wenn Sie sich nicht für das genaue Timing interessieren - Sie möchten nur die Samples in der richtigen Reihenfolge mit "ziemlich guter" Genauigkeit anzeigen, sollte die Systemuhr in Ordnung sein. Ich würde Ihnen raten,
DateTime.UtcNow
anstattDateTime.Now
Zeitzonenprobleme bei Sommerzeitübergängen usw. zu verwenden.Wenn es bei Ihrer Frage eigentlich nur darum geht
DateTime
, a mit Millisekundengenauigkeit in einen String umzuwandeln , würde ich Folgendes empfehlen:(Beachten Sie, dass dies im Gegensatz zu Ihrer Stichprobe sortierbar ist und weniger Verwirrung darüber stiftet, ob es sich um "Monat / Tag / Jahr" oder "Tag / Monat / Jahr" handelt.)
quelle
DateTime.UtcNow
, erhöht es sich immer nur einmal pro Sekunde? Sie haben das nicht gezeigt.)Das sollte funktionieren:
Wenn Sie es nicht anzeigen müssen und nur den Zeitunterschied kennen müssen, konvertieren Sie es nicht in einen String. Lass es einfach so,
DateTime.Now();
Und verwenden Sie
TimeSpan
, um den Unterschied zwischen Zeitintervallen zu kennen:Beispiel
quelle
Ich suchte nach einer ähnlichen Lösung, basierend auf dem, was in diesem Thread vorgeschlagen wurde. Ich verwende Folgendes
DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss.fff")
und es funktioniert wie Charme. Hinweis: Dies.fff
sind die Genauigkeitszahlen, die Sie erfassen möchten.quelle
HH
(Militärzeit) oder Hinzufügentt
(PM oder AM). Wie in diesem Beispiel gezeigt: repl.it/KGr3/1Verwenden Sie DateTime Structure mit Millisekunden und Format wie folgt:
quelle
Antwort des Pyromanten scheint mir ziemlich gut zu sein, aber vielleicht wollten Sie:
Wenn Sie jedoch Daten vergleichen, ist TimeSpan der richtige Weg.
quelle
TotalMilliseconds
. Millisekunden enthält den aktuellen Millisekunden-Zähler, der niemals größer als 1000 ist, während TotalMillisekunden die gesamten Millisekunden enthält, die seit der Epoche vergangen sind.Wenn Sie weiterhin ein Datum anstelle einer Zeichenfolge wie bei den anderen Antworten wünschen, fügen Sie einfach diese Erweiterungsmethode hinzu.
quelle
Soweit ich die Frage verstehe, können Sie sich für Folgendes entscheiden:
Dadurch werden Zecken abgeschnitten, die kleiner als 1 Millisekunde sind.
quelle
Das Problem mit
DateTime.UtcNow
undDateTime.Now
ist, dass es je nach Computer und Betriebssystem möglicherweise nur zwischen 10 und 15 Millisekunden genau ist. Auf Windows-Computern kann jedoch die Low-Level-Funktion GetSystemTimePreciseAsFileTime verwendet werden , um eine Mikrosekundengenauigkeit zu erzielen (siehe FunktionGetTimeStamp()
unten).quelle
Versuchen Sie es mit datetime.now.ticks. Dies bietet eine Nanosekundengenauigkeit. Das Delta von zwei Ticks (Stoptick - Starttick) / 10.000 ist die Millisekunde des angegebenen Intervalls.
https://docs.microsoft.com/en-us/dotnet/api/system.datetime.ticks?view=netframework-4.7.2
quelle
Wenn Sie Mikrosekunden möchten, wechseln Sie einfach
10000
zu10
, und wenn Sie das 10. Mikro möchten, löschen Sie/ 10000
.quelle
DateTime.Now.ToString ("ddMMyyyyhhmmssffff")
quelle