Je me demandais, est-il possible de créer un horodatage en c # à partir d'une date/heure? J'ai besoin d'une valeur de précision en millisecondes qui fonctionne également dans Compact Framework (en disant que, depuis DateTime.ToBinary () n'existe pas dans CF).
Mon problème est que je veux stocker cette valeur dans une base de données agnostique afin que je puisse la trier plus tard et savoir quelle valeur est la plus grande d'une autre, etc.
J'utilise toujours quelque chose comme ceci:
public static String GetTimestamp(this DateTime value)
{
return value.ToString("yyyyMMddHHmmssfff");
}
Cela vous donnera une chaîne comme 200905211035131468, car elle passe des bits de l'ordre le plus élevé à l'horodatage au tri par ordre le plus simple dans vos requêtes SQL.
Je crois que vous pouvez créer un horodatage de style Unix précis à la seconde en utilisant ce qui suit
//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();
Ajuster le dénominateur vous permet de choisir votre niveau de précision
Vous pouvez utiliser la propriété DateTime.Ticks, qui est une mémoire stockable longue et universelle, toujours croissante et utilisable sur le cadre compact. Assurez-vous simplement que votre code n'est pas utilisé après le 31 décembre 9999;)
Vous pouvez aussi utiliser
Stopwatch.GetTimestamp (). ToString ();
quand tu as besoin en quelques secondes:
var timestamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds;
Si vous souhaitez que les horodatages correspondent aux heures réelles réelles MAIS souhaitez é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;
}
}
}