Millisekunden in DateTime.Jetzt auf .NET Compact Framework immer null?
ich will eine Zeitstempel für Protokolle auf einem Windows Mobile-Projekt. Die Genauigkeit muss im Bereich von hundert Millisekunden mindestens.
Aber mein Aufruf DateTime.Now
gibt eine DateTime
Objekt mit der Millisecond
- Eigenschaft auf null gesetzt. Auch die Ticks
Eigenschaft ist gerundet entsprechend.
Wie man besser Zeit-Genauigkeit?
Erinnern, dass mein code läuft auf dem Compact Framework, version 3.5. Ich benutze ein HTC touch Pro 2-Gerät.
Auf der Grundlage der Antwort von MusiGenesis ich habe die folgende Klasse, die dieses problem gelöst:
///<summary>
///A more precisely implementation of some DateTime properties on mobile devices.
///</summary>
///<devdoc>Tested on a HTC Touch Pro2.</devdoc>
public static class DateTimePrecisely
{
///<summary>
///Remembers the start time when this model was created.
///</summary>
private static DateTime _start = DateTime.Now;
///<summary>
///Remembers the system uptime ticks when this model was created. This
///serves as a more precise time provider as DateTime.Now can do.
///</summary>
private static int _startTick = Environment.TickCount;
///<summary>
///Gets a DateTime object that is set exactly to the current date and time on this computer, expressed as the local time.
///</summary>
///<returns></returns>
public static DateTime Now
{
get
{
return _start.AddMilliseconds(Environment.TickCount - _startTick);
}
}
}
InformationsquelleAutor der Frage Marcel | 2010-04-09
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Environment.TickCount
zurück, die Anzahl der Millisekunden an, die Windows (oder Windows Mobile) läuft seit dem letzten Neustart.Diesen zu nutzen, fügen Sie diese beiden form-Niveau-Variablen im code:
Im form-Load-Ereignis, dies zu tun:
Wann immer Sie eine DateTime-Objekt mit Millisekunden, dies zu tun:
Environment.TickCount
ist einint
und dieser Wert wird in "wrap-around" zuInt32.MinValue
nach 25 Tage oder so. Wenn Ihr Gerät wird ausgeführt, dass schon lange ohne Neustart, werden Sie wollen, fügen Sie ein Kontrollkästchen für eineEnvironment.TickCount
Wert, der kleiner ist als der Letzte Wert gelesen, und setzen Sie beide_start
und_startTick
wenn dem so ist.InformationsquelleAutor der Antwort MusiGenesis
Dieser Artikel auf erste Millisekunden-Auflösung Zeit kann auch hilfreich sein.
InformationsquelleAutor der Antwort ctacke
Was über die High-Resolution Timer?
InformationsquelleAutor der Antwort Oliver
Die wichtigste alternative ist das System.Diagnostik.Stopwatch-Klasse.
Es ist in die CE-aber beachten Sie die
IsHighResolution
Eigenschaft. Es ist wohl Falsch auf dem Gerät aber nicht überprüfen.Es ist so genau, wie Sie gehen zu bekommen, ohne P/Invoke.
InformationsquelleAutor der Antwort Henk Holterman
In regelmäßigen framework v2.0 Sie können verwenden DateTime.Nun.ToString("yyyy-MM-dd HH:mm:ss.fff") um Millisekunden. Mehr f bedeutet mehr Präzision.
InformationsquelleAutor der Antwort Nime Cloud