Funzione che crea un timestamp in c #

Mi stavo chiedendo, c’è un modo per creare un timestamp in c # da un datetime? Ho bisogno di un valore di precisione millisecondo che funzioni anche in Compact Framework (dicendo che dal momento che DateTime.ToBinary () non esiste in CF).

Il mio problema è che voglio memorizzare questo valore in un modo agnostico di database in modo da poterlo ordinare in un secondo momento e scoprire quale valore è maggiore da un altro ecc.

Io uso sempre qualcosa come il seguente:

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

Ciò fornirà una stringa come 200905211035131468, poiché la stringa passa dai bit di ordine più elevato del timestamp all’ordinamento più semplice dell’ordine di stringa più basso nelle query SQL può essere utilizzata per ordinare per data se si stanno incollando valori in un database

Credo che tu possa creare un datestamp di stile unix accurato ad un secondo usando 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(); 

La regolazione del denominatore ti consente di scegliere il tuo livello di precisione

È ansible utilizzare la proprietà DateTime.Ticks, che è un archivio lungo e universale, sempre crescente e utilizzabile anche nel framework compatto. Assicurati che il tuo codice non venga utilizzato dopo il 31 dicembre 9999;)

Puoi anche usare

Stopwatch.GetTimestamp () ToString ().;

Se si desidera che i timestamp corrispondano ai tempi reali effettivi, ma si desidera che siano univoci (per una determinata istanza dell’applicazione), è ansible 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 ne hai bisogno in pochi secondi:

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