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.

War es hilfreich?

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top