parametrizado - uso de objetos en c#
FunciĆ³n que crea una marca de tiempo en c# (6)
Me preguntaba, ¿hay alguna 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 funcione en Compact Framework (diciendo que dado que DateTime.ToBinary () no existe en CF).
Mi problema es que quiero almacenar este valor de una manera independiente de la base de datos para poder ordenarlo más tarde y descubrir qué valor es mayor de otro, etc.
Creo que puedes crear un marcador de fecha de estilo Unix exacto a un segundo usando el 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 su nivel de precisión
Puede usar la propiedad DateTime.Ticks, que es almacenable de forma universal y prolongada, y siempre se puede usar y aumentar en el marco compacto. Solo asegúrese de que su código no se use después del 31 de diciembre de 1999;)
Si desea marcas de tiempo que correspondan a tiempos reales reales, PERO también desea que sean únicas (para una instancia de aplicación determinada), puede usar 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;
}
}
}
Siempre uso algo como lo siguiente:
public static String GetTimestamp(this DateTime value)
{
return value.ToString("yyyyMMddHHmmssfff");
}
Esto le dará una cadena como 200905211035131468, ya que la cadena va desde los bits de mayor orden de la marca de tiempo hasta el orden más bajo. La ordenación simple de cadenas en sus consultas SQL se puede usar para ordenar por fecha si está pegando valores en una base de datos.
También puedes usar
Stopwatch.GetTimestamp (). ToString ();
cuando lo necesites en segundos:
var timestamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds;