web-dev-qa-db-fra.com

Fonction qui crée un horodatage en c #

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.

100
Konstantinos

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.

202
RobV

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

41
Voxel

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

19
Frans Bouma

Vous pouvez aussi utiliser

Stopwatch.GetTimestamp (). ToString ();

7
mgokhanbakal

quand tu as besoin en quelques secondes:

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

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;
       }
   }
}
3
Ian Mercer