Pregunta

Me preguntaba, ¿hay una manera de crear una marca de tiempo en C # desde una fecha y hora? Necesito un valor de precisión de milisegundos que también trabaja en Compact Framework (diciendo que desde DateTime.ToBinary () no existe en la FQ).

Mi problema es que quiero para almacenar este valor de manera agnóstica base de datos para que pueda sortBy más tarde y averiguar qué valor es superior a otro, etc.

¿Fue útil?

Solución

Siempre utilizo algo como lo siguiente:

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

Esto le dará una cadena como 200905211035131468, como la cadena va de bits de orden más alto de la marca de tiempo de orden más bajo de cadena sencilla de clasificación en las consultas SQL se pueden utilizar para ordenar por fecha, si usted se está pegando valores en una base de datos

Otros consejos

Creo que se puede crear una marca de fecha estilo Unix precisa a un segundo utilizando la siguiente

//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 el denominador le permite elegir el nivel de precisión

Se puede utilizar la propiedad DateTime.Ticks, que es una larga y universal almacenable, siempre en aumento y utilizable en el marco compacto también. Sólo asegúrese de que su código no se utiliza después del 31 de diciembre de 9999;)

También puede utilizar

Stopwatch.GetTimestamp () ToString ();.

Si desea marcas de tiempo que corresponden a los tiempos reales reales sino que también quieren que sean únicos (por ejemplo, una aplicación determinada), puede utilizar el siguiente 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;
       }
   }
}

cuando u necesidad en cuestión de segundos:

var timestamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top