Question

Je me demandais, est-il un moyen de créer un horodatage en C # d'un datetime? J'ai besoin d'une valeur de précision milliseconde qui fonctionne aussi dans Compact Framework (en disant que, depuis DateTime.ToBinary () n'existe pas dans CF).

Mon problème est que je veux conserver cette valeur de manière agnostique base de données afin que je puisse sortBy plus tard et savoir quelle valeur est supérieure d'un autre etc.

Était-ce utile?

La solution

J'utilise toujours quelque chose comme ce qui suit:

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

Cela vous donnera une chaîne comme 200905211035131468, comme la chaîne passe de bits de poids fort de l'horodatage au plus bas de tri simple chaîne de l'ordre dans vos requêtes SQL peuvent être utilisées pour commander par date si vous coller des valeurs dans une base de données

Autres conseils

Je crois que vous pouvez créer un style unix datestamp 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.ToString();

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

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

Vous pouvez également utiliser

Stopwatch.GetTimestamp () de ToString ();.

Si vous voulez horodatages qui correspondent à des temps réels réels, mais veulent aussi leur être unique (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;
       }
   }
}

u besoin en quelques secondes:

var timestamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top