Fonction qui crée un horodatage dans c #

Je me demandais, existe-t-il un moyen de créer un horodatage dans c # à partir d’une date / heure? J’ai besoin d’une valeur de précision milliseconde qui fonctionne également dans Compact Framework (en disant que puisque DateTime.ToBinary () n’existe pas dans CF).

Mon problème est que je veux stocker cette valeur de manière agnostique dans la firebase database afin que je puisse la sortinger plus tard et découvrir quelle valeur est la plus grande par rapport à une autre, etc.

J’utilise toujours quelque chose comme ceci:

public static Ssortingng GetTimestamp(this DateTime value) { return value.ToSsortingng("yyyyMMddHHmmssfff"); } 

Cela vous donnera une chaîne comme 200905211035131468, comme la chaîne va des bits les plus élevés de l’horodatage au plus bas ordre, le sorting simple des chaînes dans vos requêtes SQL peut être utilisé pour classer par date si vous collez des valeurs dans une firebase database

Je crois que vous pouvez créer un horodatage de style unix précis à une seconde en utilisant les éléments suivants

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

Le réglage du dénominateur vous permet de choisir votre niveau de précision

Vous pouvez utiliser la propriété DateTime.Ticks, longue et universelle, stockable, toujours croissante et utilisable sur le framework compact. Assurez-vous que votre code n’est pas utilisé après le 31 décembre 9999;)

Vous pouvez aussi utiliser

Chronomètre.GetTimestamp (). ToSsortingng ();

Si vous souhaitez que les horodatages correspondant aux temps réels réels MAIS veulent également qu’ils soient uniques (pour une instance d’application donnée), vous pouvez utiliser le code suivant:

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

quand vous avez besoin en quelques secondes:

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