Funktion, die einen Zeitstempel in c # erstellt
-
23-08-2019 - |
Frage
Ich frage mich, ist es eine Möglichkeit, einen Zeitstempel in c # von einem Datetime zu erstellen? Ich brauche eine Millisekunde Präzision Wert, der auch in Compact Framework arbeitet (sagen, dass seit DateTime.ToBinary () existiert nicht in CF).
Mein Problem ist, dass ich diesen Wert in einer Datenbank Agnostiker Weise gespeichert werden sollen, so kann ich es SortBy später und herauszufinden, welcher Wert größer ist von einem anderen etc.
Lösung
Ich benutze immer etwas wie folgt aus:
public static String GetTimestamp(this DateTime value)
{
return value.ToString("yyyyMMddHHmmssfff");
}
Dies gibt Ihnen eine Zeichenfolge wie 200905211035131468, wie die Zeichenfolge aus höchstwertigen Bits des Zeitstempels einfachen String niedrigsten Ordnung in Ihren SQL-Abfragen Sortierung geht kann verwendet werden, nach Datum zu bestellen, wenn Sie Werte in einer Datenbank abgelegt haben
Andere Tipps
Ich glaube, Sie einen Stil Unix erstellen können Zeitstempel genau einen zweiten das mit folgenden
//Find unix timestamp (seconds since 01/01/1970)
long ticks = DateTime.UtcNow.Ticks - DateTime.Parse("01/01/1970 00:00:00").Ticks;
ticks /= 10000000; //Convert windows ticks to seconds
timestamp = ticks.ToString();
den Nenner einstellen können Sie Ihre Maß an Präzision wählen
Sie könnten die DateTime.Ticks Eigenschaft verwenden, die eine lange und universelle speicherbar, wird immer größer und nutzbar auf dem kompakten Rahmen auch. So stellen Sie sicher, dass Ihr Code nicht verwendet wird nach dem 31. Dezember 9999;)
Sie können auch verwenden
Stopwatch.GetTimestamp () ToString ();.
Wenn Sie Zeitstempel wollen, dass die tatsächlichen reale Zeiten entsprechen, sondern wollen auch sie einzigartig sein (für eine bestimmte Anwendungsinstanz), können Sie den folgenden Code verwenden:
public class HiResDateTime
{
private static long lastTimeStamp = DateTime.UtcNow.Ticks;
public static long UtcNowTicks
{
get
{
long orig, newval;
do
{
orig = lastTimeStamp;
long now = DateTime.UtcNow.Ticks;
newval = Math.Max(now, orig + 1);
} while (Interlocked.CompareExchange
(ref lastTimeStamp, newval, orig) != orig);
return newval;
}
}
}
, wenn u müssen in Sekunden:
var timestamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds;