He echado un vistazo a stackoverflow, e incluso he visto algunas de las preguntas sugeridas y ninguna parece responder, ¿cómo se obtiene una marca de tiempo de Unix en C #?
c#
timestamp
unix-timestamp
bizzehdee
fuente
fuente
Respuestas:
Obtiene una marca de tiempo de Unix en C # al usar
DateTime.UtcNow
y restar el tiempo de la época de 1970-01-01.p.ej
DateTime.UtcNow
se puede reemplazar con cualquierDateTime
objeto para el que desea obtener la marca de tiempo de Unix.También hay un campo,
DateTime.UnixEpoch
que está muy poco documentado por MSFT, pero puede ser un sustituto denew DateTime(1970, 1, 1)
fuente
DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).Ticks / TimeSpan.TicksPerSecond;
A partir de .NET 4.6, existe
DateTimeOffset.ToUnixTimeSeconds()
.Este es un método de instancia, por lo que se espera que lo llame en una instancia de
DateTimeOffset
. También puede emitir cualquier instancia deDateTime
, aunque tenga cuidado con la zona horaria .Para obtener la marca de tiempo actual:
Para obtener la marca de tiempo de un
DateTime
:fuente
Int64
: para cuando se da la vuelta, ya no estaríamos usando los años de la Tierra por falta de una Tierra.DateTimeOffset.Now.ToUnixTimeSeconds()
También puedes usar garrapatas. Estoy codificando para Windows Mobile, así que no tengo el conjunto completo de métodos. TotalSeconds no está disponible para mí.
o
fuente
new DateTime(1970, 1, 1)
crea un tiempo conKind
propiedad no especificada . Lo que realmente quieres quenew DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
sea realmente correctoEsto es lo que uso:
Tenga en cuenta que este método devolverá la hora como hora universal coordinada (UTC).
fuente
double
tipo; si lo hace demasiado largo, perderá precisión.)Truncar
.TotalSeconds
es importante ya que se define comothe value of the current System.TimeSpan structure expressed in whole fractional seconds.
¿Y qué tal una extensión para
DateTime
? El segundo es probablemente más confuso que vale la pena hasta que existan extensiones de propiedad.fuente
Cuando resta 1970 del tiempo actual, tenga en cuenta que el intervalo de tiempo tendrá un campo de milisegundos distinto de cero. Si por alguna razón está interesado en los milisegundos, tenga esto en cuenta.
Esto es lo que hice para solucionar este problema.
fuente
Esto es lo que yo uso.
fuente
He unido los enfoques más elegantes para este método de utilidad:
fuente
Esta solución ayudó en mi situación:
usando ayuda en el código:
fuente
Hay un ToUnixTimeMilliseconds para DateTimeOffset en el sistema
Puede escribir un método similar para DateTime:
10000000L - convirtiendo ticks a segundos
62135596800L - convirtiendo 01.01.01 a 01.01.1978
No hay problema con Utc y fugas
fuente
A continuación se muestra una clase de extensión de 2 vías que admite:
En el caso de OP, el uso es:
o
Aunque existe una respuesta directa, creo que usar un enfoque genérico es mejor. Especialmente porque es muy probable que un proyecto que necesite una conversión como esta, también necesite estas extensiones de todos modos, por lo que es mejor usar la misma herramienta para todos.
fuente
Usé esto después de luchar por un tiempo, también atiende el desplazamiento de la zona horaria:
fuente
El código simple que estoy usando:
Este código proporciona una marca de tiempo de Unix, milisegundos totales desde 1970-01-01 hasta ahora.
fuente