unixtime online from conversion time gps unix-timestamp utc

online - unix time to date



Las garrapatas entre la época de Unix y la época de GPS (4)

¿Cuál es el número de tics de un segundo entre la época de Unix (01 de enero de 1970) y la época de GPS (06 de enero de 1980)?

Hay al menos dos respuestas posibles:

  1. ¿Cuál es la marca de tiempo POSIX para 1980-01-06 UTC? Respuesta: 315964800 (exactamente), en Python:

    from datetime import datetime, timedelta print((datetime(1980,1,6) - datetime(1970,1,1)) // timedelta(seconds=1))

    Es el número de segundos SI entre las fechas sin contar los segundos de salto . En otras palabras, el código muestra cuántos segundos "UT1" (~ 1/86400 de un día medio solar) pasaron entre los eventos.

    UTC, las escalas de tiempo GPS marcan en segundos SI. UTC "olvida" los segundos de salto y, por lo tanto, el número real de segundos SI entre las fechas es ligeramente mayor que la marca de hora POSIX.

    315964800 no es la respuesta correcta si desea encontrar los segundos transcurridos

  2. ¿Cuántos segundos SI transcurrieron entre 1970-01-01 UTC y 1980-01-06 UTC? Respuesta: 315964811 (aproximadamente).

Para responder a la segunda pregunta, necesita saber cuántos segundos de salto intercalar se insertaron entre las dos fechas (convierta UTC a la Hora Atómica Internacional (TAI)):

#!/usr/bin/env python3 from datetime import datetime, timedelta tai_posix_epoch = datetime(1970, 1, 1) + timedelta(seconds=8, microseconds=82) tai_gps_epoch = datetime(1980, 1, 6) + timedelta(seconds=19) print(round((tai_gps_epoch - tai_posix_epoch) / timedelta(seconds=1)))

La diferencia entre el tiempo de TAI y GPS es constante dentro de 10 segundos de nanosegundos.

El tiempo entre 1970 y 1972 (cuando se presentó UTC) es un poco borroso; La diferencia TAI-UTC no es el número entero de segundos en ese período :

from decimal import Decimal as D MJD_1970_01_01 = 40587 dAT_1970_01_01 = D("4.213170") + (MJD_1970_01_01 - 39126) * D("0.002592") # -> delta(AT) = TAI - UTC = Decimal(''8.000082'') # 8 seconds, 82 microseconds

Aquí hay una imagen que muestra la relación entre las escalas de tiempo UT1, UTC y TAI a lo largo de los años : Cada paso es un segundo que comienza con TAI - UTC = 10s en 1972-01-01. A 1 de julio de 2015, se habían insertado 26 segundos de salto positivos.

315964819 marca de tiempo podría explicarse si se usa la época 1970-01-01 00:00:00 TAI :

print(datetime(1970, 1, 1) + timedelta(seconds=315964819)) # TAI # 1980-01-06 00:00:19 TAI or 1980-01-06 00:00:00 UTC

es decir, exactamente 315964819 segundos SI transcurrieron entre 1970-01-01 00:00:00 TAI y 1980-01-06 00:00:00 UTC (nota: las fechas se expresan utilizando diferentes escalas de tiempo).

las zonas horarias "correctas" usan 1970-01-01 00:00:10 TAI época de 1970-01-01 00:00:10 TAI (aviso: 10 segundos) y, por lo tanto, la marca de tiempo correspondiente para la época de GPS (1980-01-06 00:00:00 UTC) es 315964809 (no 315964819 ). Aquí hay una breve descripción de la diferencia entre las marcas de tiempo "correctas" y POSIX :

Los archivos "correctos" en la base de datos tz (zoneinfo) tienen una sutil diferencia con el estándar POSIX. POSIX requiere que el valor de reloj del sistema de time_t represente el número de segundos sin saltos desde 1970-01-01 . Esto es lo mismo que requerir que POSIX segundos sean segundos medios solares de UT , no los segundos atómicos que UTC ha contado desde 1972-01-01.

Los archivos de información de zona "correctos" afirman que el valor de reloj del sistema de time_t representa el número real de segundos en la escala de tiempo de emisión aprobada internacionalmente desde 1970-01-01 . Como resultado, el valor de time_t que es esperado por los archivos de zona de "derecho" es mayor que el valor de time_t especificado por POSIX. La diferencia en los valores de time_t es el número de segundos de salto que se han insertado en la escala de tiempo de emisión aprobada internacionalmente. A partir del año 2015 la diferencia es de 26 segundos. enfatizar es mio

¿Puede alguien autoritario por favor entrar aquí?

IERS BULLETIN C (los datos que he usado anteriormente) es la autoridad en segundos de salto (y por lo tanto (indirectamente) en la diferencia entre las escalas de tiempo UTC y GPS).

¿Cuál es el número de tics de un segundo entre la época de Unix (01 de enero de 1970) y la época de GPS (06 de enero de 1980)?

He visto múltiples respuestas de varias fuentes en la web. Un campo afirma que la respuesta es 315964800 , el otro afirma que es 315964819 . Siempre pensé que era 315964800, pero ahora no estoy tan seguro.

Acabo de descubrir que mi línea de base de software ha estado utilizando 315964819 durante los últimos ocho años. Me cuesta entender cómo podría haber tenido 19 segundos de inactividad y nadie lo notó cuando integramos nuestros dispositivos integrados con otros dispositivos.

Creo que quien haya puesto 315964819 en la línea de base del código debe haber utilizado erróneamente un desplazamiento TAI (19 segundos).

Por lo que entiendo, el tiempo de Unix no incluye segundos de salto, lo que me indicaría que 315964800 es el número de tics entre las dos épocas. Entonces pienso en cómo el tiempo de Unix maneja el segundo salto. Simplemente repite el conteo de ticks cuando se inserta un segundo de salto, y se insertaron 19 segundos de salto entre 1970 y 1980 ... Empiezo a preguntarme si los tics repetidos importan. No lo creo, pero alguien en la historia de este código pensaba que sí, y parecía funcionar ...

Lo que me falta es estar a punto de cambiar un conjunto constante en las edades oscuras de este producto que tiene que ver con el tiempo, que es importante para la plataforma, desde lo que fue hasta lo que creo que es más preciso, y Quería una especie de aprobación por parte de más personas conocedoras que yo.

¿Puede alguien autoritario por favor entrar aquí?

315964800 campamento

315964819 campamento

También tenga en cuenta que sólo estoy preguntando acerca de la época de Unix a la época de GPS. Estoy bastante seguro de que tenemos segundos de salto desde que se cubrió adecuadamente la época del GPS.


Los diferentes valores que usted indicó se deben a la mezcla de la diferencia de 1970 a 1980 con los segundos de salto.
El valor de desplazamiento correcto es 315964800 segundos.

Explicación:

El tiempo UTC y GPS se desvía (en promedio) cada 18 meses por un segundo adicional. Esto se llama un segundo de salto, introducido en la base de tiempo UTC, necesario para ajustar los cambios en la rotación de la tierra.

Tiempo de GPS no ajustado por segundos de salto.

Actualmente (2013) hay un desplazamiento de 16s:
Tiempo GPS-UTC = 16 segundos

Unix tiempo es un formato de tiempo no una referencia de tiempo. Representa el número de milisegundos (o segundos) desde 1.1.1970 UTC. Idealmente, la hora del sistema está sincronizada con UTC por un TimeServer (NTP).

Para convertir y obtener su compensación, debe usar una compensación fija: (6.1.1980 UTC - 1.1.1970 UTC)

y ENTONCES agrega el valor actual de GPS a la desviación UTC (actualmente 16 s). Por ejemplo, haga que ese valor sea configurable, o lea la compensación actual de un dispositivo GPS (ellos saben la diferencia entre la hora UTC y la hora GPS)

Los diferentes valores que usted indicó se deben a la mezcla de la diferencia de 1970 a 1980 con los segundos de salto. No hagas eso, manéjalos por separado.

Este programa java:

SimpleDateFormat df = new SimpleDateFormat(); df.setTimeZone(TimeZone.getTimeZone("UTC")); Date x = df.parse("1.1.1970 00:00:00"); Date y = df.parse("6.1.1980 00:00:00"); long diff = y.getTime() - x.getTime(); long diffSec = diff / 1000; System.out.println("diffSec= " + diffSec);

Produce este valor:

diffSec = 315964800

Así que este es el desplazamiento correcto entre 1.1.1970 UTC y 6.1.1980 UTC donde comenzó la hora GPS. Luego tiene que corregir 16 segundos adicionales que se introdujeron desde 6.1.1980 y hoy, para calcular la hora GPS de una hora UTC actual.


Supongo que estoy en el tercer campamento :)
Llamémoslo como es:
2,904,548,141,415,381,930 "períodos de [...] un átomo de cesio 133" medidos a 0 grados Kelvin en el geoide. (Da o toma unos pocos cientos de millones de períodos dependiendo de la definición de TAI / SI que utilices)

Respuesta corta:

Depende de qué escalas de tiempo (y qué definiciones de esas escalas de tiempo) está utilizando.

315964809 en segundos TAI (definición de 1977) y, por tanto, segundos UTC
315964800 en segundos UNIX
(Ambos son iguales entre sí, pero SOLO entre sus fechas especificadas y ambos corresponden a 2,904,548,141,415,381,930 "períodos [...]")
Tenga en cuenta que UNIX segundos se repite el mismo segundo después de completar un segundo salto UTC, por lo que los segundos UTC, 2012-06-30 23:59:60 UTC y 2012-07-01 00:00:00 UTC, fueron ambos representado por una marca de tiempo UNIX de 1341100800.

Respuesta detallada:

Utilizando segundos TAI
Aunque en realidad no lo son, supongamos que todos los segundos de TAI antes de 1977 siguen siendo exactamente iguales a la definición de los segundos de TAI / SI de 1977/1997.
Supongamos también que por
"Época de tiempo de Unix (01 de enero de 1970)" a "Época de tiempo de GPS (06 de enero de 1980)"
Te refieres
1970-01-01 00:00:10 TAI a 1980-01-06 00:00:19 TAI
en este caso habría
(((365 días / año * 10 años) + 2 días bisiestos + 5 días) * 86400 TAI segundos / día) + 9 TAI segundos
= 315964809 segundos de TAI

Usando UNIX segundos
Aunque en realidad no lo son, supongamos que la duración de un segundo UTC antes de 1977 sigue siendo exactamente igual a la definición de un TAI / SI de 1977/1997.
Supongamos también que por
"Época de tiempo de Unix (01 de enero de 1970)" a "Época de tiempo de GPS (06 de enero de 1980)"
Te refieres
1970-01-01 00:00:00 UTC a 1980-01-06 00:00:00 UTC
y que el tiempo de UNIX retrocede un segundo después de completar un segundo de salto
en este caso habría
(((365 días / año * 10 años) + 2 días bisiestos + 5 días) * 86400 segundos / día) + 9 segundos de salto - 9 repeticiones de 9 segundos de salto de Unix
= 315964800 segundos de UNIX

Respecto a los "períodos [...]"
Un segundo TAI / SI de 1977/1997 es lo que se utilizó para generar 315964809 segundos de 9,192,631,770 periodos cada uno = 2,904,548,141,415,381,930 periodos. Un segundo SI de 1997 es igual a la duración de 9,192,631,770 períodos de la radiación correspondiente a la transición entre los dos niveles hiperfinos del estado fundamental del átomo de cesio-133 en reposo a una temperatura de 0 K. La definición de TAI de 1977 mide SI segundos en el geoide.


volver a la pregunta original, "época de Unix (01 de enero de 1970)" a "época de GPS (06 de enero de 1980)", por lo que la época es 315964800, 315964819 es la "época TAI" de la "época del tiempo GPS". lo que significa 315964819 = 315964800 + 19. por lo que el valor de época que utiliza en el código depende realmente de la época en la que esté utilizando.