Existe este código de ejemplo, pero luego comienza a hablar sobre problemas de milisegundos / nanosegundos.
La misma pregunta es en MSDN, segundos desde la época de Unix en C # .
Esto es lo que tengo hasta ahora:
public Double CreatedEpoch
{
get
{
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
TimeSpan span = (this.Created.ToLocalTime() - epoch);
return span.TotalSeconds;
}
set
{
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
this.Created = epoch.AddSeconds(value);
}
}
DateTimeOffset.FromUnixTimeSeconds
yDateTimeOffset.ToUnixTimeSeconds
métodos. También hay métodos para milisegundos de tiempo unix.Respuestas:
Esto es lo que necesitas:
O, para Java (que es diferente porque la marca de tiempo está en milisegundos, no en segundos):
fuente
dtDateTime.AddMilliseconds(javaTimeStamp).ToLocalTime();
static DateTimeOffset.FromUnixMilliseconds
yDateTimeOffset.ToUnixMilliseconds
.La última versión de .NET (v4.6) ha agregado soporte incorporado para las conversiones de tiempo Unix. Eso incluye el tiempo hacia y desde Unix representado por segundos o milisegundos.
DateTimeOffset
:DateTimeOffset
al tiempo de Unix en segundos:DateTimeOffset
:DateTimeOffset
al tiempo Unix en milisegundos:Nota: Estos métodos se convierten hacia y desde un UTC
DateTimeOffset
. Para obtener unaDateTime
representación simplemente use las propiedadesDateTimeOffset.UtcDateTime
oDateTimeOffset.LocalDateTime
:fuente
ToLocalTime
si quieres.long unixMilliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
Fecha y hora a la marca de tiempo UNIX:
fuente
De Wikipedia :
Entonces este es mi código:
fuente
¡Tenga cuidado si necesita una precisión superior a milisegundos!
Los métodos .NET (v4.6) (por ejemplo, FromUnixTimeMilliseconds ) no proporcionan esta precisión.
AddSeconds y AddMilliseconds también cortan los microsegundos en el doble.
Estas versiones tienen alta precisión:
Unix -> DateTime
DateTime -> Unix
fuente
UnixTimestampToDateTime
, el suministradounixTime
todavía está en segundos, ¿verdad?Ver IdentityModel.EpochTimeExtensions
fuente
DateTime.Ticks
es Int64 (largo), por lo que están evitando un reparto extra sin control.Para complementar la respuesta de ScottCher, recientemente me encontré en el molesto escenario de tener marcas de tiempo UNIX de segundos y milisegundos mezcladas arbitrariamente en un conjunto de datos de entrada. El siguiente código parece manejar esto bien:
fuente
La conversión de tiempo Unix es nueva en .NET Framework 4.6.
Ahora puede convertir más fácilmente los valores de fecha y hora hacia o desde los tipos de .NET Framework y la hora de Unix. Esto puede ser necesario, por ejemplo, al convertir valores de tiempo entre un cliente JavaScript y un servidor .NET. Las siguientes API se han agregado a la estructura DateTimeOffset :
fuente
Encontré la respuesta correcta simplemente comparando la conversión a 1/1/1970 sin el ajuste de hora local;
fuente
// 1510396991
// [11.11.2017 10:43:11 +00: 00]
fuente
Desde .net 4.6, puede hacer esto:
fuente
Por supuesto, uno puede hacer
unixEpoch
una estática global, por lo que solo necesita aparecer una vez en su proyecto, y uno puede usarAddSeconds
si el tiempo UNIX es en segundos.Para ir al otro lado:
Truncar a Int64 y / o usar
TotalSeconds
según sea necesario.fuente
Escrito una extensión más simple que funciona para nosotros. Si alguien lo busca ...
fuente
fuente
Una marca de Unix es 1 segundo (si no recuerdo mal), y una marca de .NET es de 100 nanosegundos.
Si ha tenido problemas con nanosegundos, puede intentar usar AddTick (valor 10000000 *).
fuente
Necesitaba convertir una estructura timeval (segundos, microsegundos) que contenga
UNIX time
aDateTime
sin perder precisión y no he encontrado una respuesta aquí, así que pensé que podría agregar la mía:fuente
Puedes usar DateTimeOffset .
Por ejemplo. Tengo un objeto DateTime
Si quiero convertirlo en marcas de tiempo de Unix, puedo lograrlo de la siguiente manera
Para obtener más información, visite este enlace: Método DateTimeOffset.ToUnixTimeSeconds
fuente
puedes llamar a UnixTime.UnixTimeToDateTime (doble fecha y hora))
fuente
Para .NET 4.6 y posterior:
fuente