Información sobre hora, marcas de tiempo y zona horaria de Unix

Comprenda la importancia de UTC, las marcas de tiempo de Unix y cómo se relacionan con eGauge.

¿Qué es el tiempo Unix?

El tiempo Unix es simplemente un valor numérico de la cantidad de segundos transcurridos desde la medianoche del 1 de enero de 1970 (UTC) . Esta fecha se denomina época Unix .

La época de Unix no debe confundirse con la época del medidor o eGauge, que se configura en Ajustes → Fecha y hora de inicio del registro . La época del medidor representa la hora en que el medidor se puso en funcionamiento y comenzó a registrar datos precisos.


¿Qué es UTC?

El Tiempo Universal Coordinado (abreviado UTC) es un estándar para coordinar e identificar las diferencias horarias. Cuando las horas se relacionan con el UTC, se escriben en un formato que indica la diferencia entre la hora local y el UTC.

Por ejemplo, la hora estándar del este de EE. UU. está 5 horas por detrás de UTC (-5), y una marca de tiempo relativa a la hora estándar del este puede escribirse como 2023-12-22 15:30:00-05:00 . Esto elimina cualquier ambigüedad o duda sobre la zona horaria a la que corresponde, así como si se trata del horario estándar o de horario de verano.

Del mismo modo, la hora estándar de Japón está 9 horas adelantada respecto a UTC (+9), y el mismo momento en el ejemplo anterior ( 2023-12-22 15:30:00-05:00 ) es el mismo que 2023-12-22 05:30:00+9 . En UTC, la hora sería 2023-12-22 20:30:00-00:00 . La marca de tiempo Unix equivalente es 1703277000 .


¿Qué pasa con la información de la zona horaria?

Dado que las marcas de tiempo de Unix utilizan UTC, no existe el concepto de zona horaria. Al procesarlas, se determina la hora intuitiva de la marca (que está en UTC) y luego se aplica la diferencia horaria deseada.

Por ejemplo, una marca de tiempo Unix de 1703277000 corresponde Friday, December 22, 2023 8:30:00 PM UTC . Si queremos convertirla a la hora estándar del este de EE. UU., que es 5 horas antes de la UTC, restamos 5 horas y obtenemos Friday, December 22, 2023 3:30:00 PM UTC

Las bibliotecas de programación más comunes contienen métodos para convertir marcas de tiempo de Unix en marcas de tiempo intuitivas con información de zona horaria. Por ejemplo, Python3 puede usar datetime y pytz para convertir fácilmente una marca de tiempo de Unix en una hora local intuitiva.

Por ejemplo, aquí usamos Python3 para convertir la marca de tiempo en nuestro ejemplo anterior a la hora del este de EE. UU. (Pytz elegirá automáticamente Estándar o DST):

from datetime import datetime
import pytz
tz = pytz.timezone('US/Eastern')
ts = int('1703277000')
print(datetime.fromtimestamp(ts,tz).strftime('%Y-%m-%d %H:%M:%S'))
2023-12-22 15:30:00

¿Dónde se utilizan las marcas de tiempo de Unix?

Al interactuar y obtener datos de una API de eGauge, BACnet o un servicio Modbus, las marcas de tiempo y los rangos de tiempo generalmente se informan y solicitan como marcas de tiempo Unix.


Por ejemplo, el siguiente JSON se obtuvo mediante la WebAPI. Hay dos marcas de tiempo Unix: la primera en el cuerpo principal ("ts": "1703275428") que indica la hora actual del medidor en que se generó la respuesta, y la otra en la sección de rangos ("ts": "1703030400") .


La primera marca de tiempo corresponde al Friday, December 22, 2023 8:03:48 PM, UTC . Esta es la hora en que se generó la respuesta. La segunda marca de tiempo corresponde al Wednesday, December 20, 2023 12:00:00 AM, UTC , que corresponde a los valores de la primera fila.

{
  "ts": "1703275428",
  "registers": [
    {
      "name": "S15 A",
      "type": "I",
      "idx": 4,
      "did": 0
    }
  ],
  "ranges": [
    {
      "ts": "1703030400",
      "rows": [
        [
          "2078357324"
        ]
      ],
      "delta": 0
    }
  ]
}