Jak dokładnie skonstruować znacznik czasu rzeczywistego z dokładnością do milisekund?
Podejrzewam, że masz na myśli milisekundową dokładność . DateTime
ma dużą precyzję, ale jest dość gruboziarnisty pod względem dokładności. Ogólnie rzecz biorąc, nie możesz. Zwykle zegar systemowy (z którego DateTime.Now
pobiera dane) ma rozdzielczość około 10-15 ms. Więcej informacji można znaleźć w blogu Erica Lipperta na temat precyzji i dokładności .
Jeśli potrzebujesz dokładniejszego pomiaru czasu, możesz rozważyć użycie klienta NTP.
Nie jest jednak jasne, czy naprawdę potrzebujesz tutaj milisekundowej dokładności. Jeśli nie zależy ci na dokładnym czasie - chcesz tylko pokazać próbki we właściwej kolejności, z „całkiem dobrą” dokładnością, to zegar systemowy powinien być w porządku. Radzę DateTime.UtcNow
raczej użyć zamiast DateTime.Now
tego, aby uniknąć problemów ze strefą czasową wokół przejść w czasie letnim itp.
Jeśli pytanie jest rzeczywiście tuż konwertowania DateTime
na sznurku z dokładnością do milisekund, sugeruję, używając:
string timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff",
CultureInfo.InvariantCulture);
(Należy pamiętać, że w przeciwieństwie do próbki, jest to możliwe do sortowania i mniej prawdopodobne jest, że spowoduje zamieszanie wokół tego, czy ma to być „miesiąc / dzień / rok” czy „dzień / miesiąc / rok”).