Herramientas de desarrollo · Convertidor de marca de tiempo Unix
Marcas de tiempo negativas de Unix: cómo se representan las fechas anteriores a 1970
· Cómo funciona
marcas de tiempo tiempo Unix formatos de datos
El tiempo de Unix cuenta hacia adelante desde 1970, pero también cuenta hacia atrás. Esta publicación explica qué significa una época negativa, cómo −1 se convierte en el último segundo de 1969 y dónde se rompen los sistemas que asumen valores positivos.
Una fecha de nacimiento con un signo menos: un usuario nacido en 1965 almacenado como un entero negativo y el código que lo trató como un error.
Un registro de una persona nacida antes de 1970 puede contener legítimamente una marca de tiempo Unix negativa. Rechazar cada signo menos inicial convierte una elección de representación en un error de pérdida de datos. El analizador de ToolAcre acepta un signo opcional y `fromEpoch` marca un valor de milisegundo interpretado por debajo de cero como `beforeEpoch` en lugar de tratarlo como no válido.
La pantalla luego agrega una nota que explica que el instante precede a la época Unix. Esto es más fuerte que mostrar una fecha en silencio porque mantiene el signo inusual visible para el revisor. Si un esquema ascendente prohíbe los negativos, el error pertenece a ese esquema o migración, no a la aritmética que asigna los recuentos a ambos lados del cero.
Enteros con signo y época: por qué time_t está firmado y a qué corresponden −1 y −86400
Cero es 1970-01-01T00:00:00.000Z. Las pruebas del repositorio demuestran que −1 segundo es el instante inmediatamente anterior, `1969-12-31T23:59:59.000Z`. Del mismo modo, −86,400 segundos es un día POSIX fijo antes de cero. La aritmética con signos hace que el eje sea continuo en lugar de requerir una segunda época para registros más antiguos.
El esquema atribuyó el almacenamiento firmado a `time_t`, pero este código no establece el historial de diseño ni el tipo utilizado por cada plataforma. Su evidencia más limitada es suficiente: los números de JavaScript pueden ser negativos, la detección usa magnitud absoluta y la fecha puede formatear el resultado. Describa el tipo declarado del campo productor por separado de la entrada aceptada por el convertidor.
Aritmética de época firmada alrededor de cero, sin afirmar por qué cada vez que eligió su tipo
Los valores negativos conservan la misma distinción de unidad que los positivos. `−1000` segundos señala 1,000 segundos antes de la época, mientras que `−1000` milisegundos señala solo un segundo antes. La detección automática trata ambos como segundos porque su magnitud está por debajo de 10¹¹, por lo que un recuento breve de milisegundos previo a la época requiere la selección explícita de milisegundos.
Este es un fracaso concreto del folclore del conteo de dígitos. Un desarrollador que ve un signo menos y cuatro dígitos no puede deducir la unidad a partir de la apariencia. Utilice el contrato fuente, elija el selector e inspeccione la nota de la unidad. La regla de magnitud de ToolAcre es predeterminada para datos típicos, no reemplaza los metadatos en valores históricos cercanos a 1970.
Donde fallan los valores negativos: sistemas que utilizan −1 como centinela, almacenamiento sin firmar, selectores de fechas que los fijan y lenguajes que los rechazan.
Fuera del convertidor, `−1` a veces se reserva como centinela de valores faltantes y una columna sin signo no puede conservar ningún instante negativo. Esas son posibilidades de diseño comunes, pero el repositorio no puede certificar cómo se comporta una base de datos, un selector de fechas o un idioma en particular. Pruebe el límite real antes de pasar las fechas de archivo a través de él.
Una sonda útil contiene tres valores: nulo o el marcador faltante documentado, −1, y una fecha claramente anterior. Si −1 desaparece mientras el valor anterior sobrevive, el manejo centinela está implicado; Si todos los negativos fallan, inspeccione el tipo y la validación. No “arregles” el síntoma sumando 1970 años o tomando un valor absoluto, porque ambos crean instantes diferentes.
Ejemplo resuelto: convertir −14182940 — la aritmética a una fecha 1969 de julio en UTC y en una zona local al oeste de Greenwich
Durante −14,182,940 segundos, comience en la época y retroceda 164 para completar 86,400 días de segundos, dejando 13,340 segundos. El resto son 3 horas, 42 minutos y 20 segundos. La lectura UTC resultante es `1969-07-20T20:17:40.000Z`, un instante elegido aquí específicamente para este artículo.
Una lectura local al oeste de UTC puede mostrar una hora más temprana o incluso otra fecha, pero su resultado exacto depende de la zona del navegador y de las reglas internacionales. Léalo desde el panel en lugar de publicar una respuesta universal. La verificación fija es la fila ISO; la fila local es una anotación ambiental en ese mismo recuento negativo.
Ejemplo resuelto: convertir −14,182,940 con aritmética UTC verificable
ToolAcre verifica su valor interpretado con ±8.64×10¹⁵ milisegundos, el rango de fechas indicado en la fuente. También demuestra la conversión de −2,208,988,800 segundos a `1900-01-01T00:00:00.000Z`. Esos hechos muestran que la ruta llega mucho antes de 1970 sin implicar que todos los sistemas de almacenamiento puedan transportar el mismo rango.
Un campo de 32 bits firmado tiene un intervalo matemático más estrecho que la fecha de JavaScript, pero el convertidor no inspecciona el ancho del campo cuando se pega un número. Preservar el tipo de fuente en una auditoría. Una conversión exitosa del navegador demuestra representabilidad aquí, no un viaje de ida y vuelta seguro a través del firmware, columnas SQL o protocolos binarios en otros lugares.
Se conoce el rango de fechas del convertidor; Los límites externos de 32 bits dependen de su tipo de almacenamiento.
Convertir un conteo en una fecha de JavaScript no reconstruye el calendario civil realmente impreso en cada lugar hace siglos. La implementación utiliza el modelo de fecha de la plataforma y devuelve una representación ISO; no contiene ningún selector de calendario histórico, archivo local ni fuente documental para las reformas del calendario. Esas afirmaciones están intencionalmente ausentes.
Para los registros de software modernos, la representación de la máquina proléptica aún puede ser exactamente el contrato que necesita. Para genealogía, historia jurídica o transcripción de archivos, conserve la fecha escrita original y su contexto calendario junto con cualquier época derivada. Un número conveniente que se pueda ordenar no debería borrar la incertidumbre que la conversión no puede resolver.
Las reclamaciones del historial del calendario están fuera de la evidencia de este convertidor.
Negativo es una dirección en el eje de época, no una categoría de error. ToolAcre lo analiza, aplica las mismas reglas de segundos o milisegundos por magnitud y marca el resultado como antes de la época. Ese comportamiento permite al revisor distinguir un instante antiguo legítimo de un centinela o una falla de almacenamiento sin firmar en otro lugar.
Al auditar datos anteriores a 1970, indique la unidad, el tipo de fuente y la convención de valores faltantes antes de interpretar el signo. Luego compare el resultado ISO con un registro conocido. El signo por sí solo es aritmética significativa; el esquema circundante determina si el productor pretendía esa aritmética o utilizó el mismo número como valor de control.