Domanda

Mi chiedevo, c'è un modo per creare un timestamp in C # da un datetime? Ho bisogno di un valore di precisione millisecondo che funziona anche in Compact Framework (dicendo che da quando DateTime.ToBinary () non esiste in CF).

Il mio problema è che voglio per memorizzare questo valore in modo indipendente dal database in modo che io possa sortby in un secondo momento e scoprire quale valore è maggiore di un altro, ecc.

È stato utile?

Soluzione

Io uso sempre qualcosa di simile al seguente:

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

Questo vi darà una stringa come 200.905.211.035,131468 millions, come la stringa va dal più alto bit di ordine del timestamp di infimo ordine semplice stringa di smistamento nelle query SQL possono essere utilizzate per ordinare per data se si sta attaccando i valori in un database

Altri suggerimenti

Credo che si può creare uno stile datestamp unix accurato per un secondo utilizzando il seguente

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

Regolazione del denominatore consente di scegliere il livello di precisione

È possibile utilizzare la proprietà DateTime.Ticks, che è una lunga e universale memorizzabili, sempre crescente e utilizzabile sul quadro compatto pure. Basta assicurarsi che il codice non viene utilizzato dopo il 31 dicembre 9999;)

È inoltre possibile utilizzare

Stopwatch.GetTimestamp () ToString ();.

Se si vuole timestamp che corrispondono ai tempi reali reali ma vogliono anche loro di essere unico (per una determinata istanza di applicazione), è possibile utilizzare il seguente codice:

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;
       }
   }
}

quando u bisogno in pochi secondi:

var timestamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top