wake-up-neo.com

Funktion, die einen Zeitstempel in c # erstellt

Ich habe mich gefragt, ob es eine Möglichkeit gibt, einen Zeitstempel in c # aus einer Datums- und Uhrzeitangabe zu erstellen. Ich benötige einen Millisekunden-Genauigkeitswert, der auch in Compact Framework funktioniert (da DateTime.ToBinary () in CF nicht vorhanden ist).

Mein Problem ist, dass ich diesen Wert datenbankunabhängig speichern möchte, damit ich ihn später sortieren und herausfinden kann, welcher Wert von einem anderen größer ist usw.

100
Konstantinos

Ich benutze immer so etwas wie das Folgende:

public static String GetTimestamp(this DateTime value)
{
    return value.ToString("yyyyMMddHHmmssfff");
}

Auf diese Weise erhalten Sie eine Zeichenfolge wie 200905211035131468, da die Zeichenfolge vom höchsten Bit des Zeitstempels zum niedrigsten Bit wechselt. Die einfache Sortierung der Zeichenfolgen in Ihren SQL-Abfragen kann zum Sortieren nach Datum verwendet werden, wenn Sie Werte in einer Datenbank speichern

202
RobV

Ich glaube, Sie können einen sekundengenauen Datenstempel im Unix-Stil erstellen, indem Sie Folgendes verwenden

//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();

Durch Anpassen des Nenners können Sie die Genauigkeit festlegen

41
Voxel

Sie können die DateTime.Ticks-Eigenschaft verwenden, die lang und universell speicherbar ist und immer größer und auch auf dem kompakten Framework verwendbar ist. Achte nur darauf, dass dein Code nach dem 31. Dezember 9999 nicht mehr verwendet wird;)

19
Frans Bouma

Sie können auch verwenden

Stopwatch.GetTimestamp (). ToString ();

7
mgokhanbakal

wenn Sie in Sekunden brauchen:

var timestamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds;
3
Adi_Pithwa

Wenn Sie möchten, dass Zeitstempel den tatsächlichen Echtzeitzeiten entsprechen, sie jedoch auch eindeutig sind (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;
       }
   }
}
3
Ian Mercer