Pergunta

Eu estava pensando, há uma maneira de criar um timestamp em c # a partir de uma data e hora? Eu preciso de um valor de precisão milissegundo que também trabalha em Compact Framework (dizendo que desde DateTime.ToBinary () não existe no CF).

O meu problema é que eu quero para armazenar este valor de forma agnóstica de banco de dados para que eu possa sortBy-lo mais tarde e descobrir qual valor for maior de outro etc.

Foi útil?

Solução

Eu sempre usar algo como o seguinte:

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

Isto lhe dará uma string como 200905211035131468, como a corda vai de bits mais altos ordem do timestamp para o menor seqüência de ordem simples de classificação em suas consultas SQL podem ser utilizadas para ordem por data se você está furando valores em um banco de dados

Outras dicas

Eu acredito que você pode criar um datestamp estilo unix com precisão de um segundo usando o seguinte

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

Ajustar o denominador permite que você escolha o seu nível de precisão

Você pode usar a propriedade DateTime.Ticks, que é um armazenável longa e universal, sempre a aumentar e utilizável no quadro compacto também. Apenas certifique-se o seu código não é usado depois de 31 de dezembro 9999;)

Você também pode usar

Stopwatch.GetTimestamp () ToString ();.

Se você quiser timestamps que correspondem aos tempos reais atuais, mas também quero que eles ser único (para uma determinada instância do aplicativo), você pode usar o seguinte código:

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 u precisa em segundos:

var timestamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top