¿Por qué se calculan las fechas a partir del 1 de enero de 1970?

95

¿Hay alguna razón para usar la fecha (1 de enero de 1970) como estándar predeterminado para la manipulación del tiempo? He visto este estándar tanto en Java como en Python. Estos dos idiomas que conozco. ¿Hay otros lenguajes populares que sigan el mismo estándar?

Por favor describa.

Vijay Shanker Dubey
fuente
1
Otro lenguaje popular que sigue el mismo estándar es PHP, es un punto de inicio de tiempo bastante común.
Greg K

Respuestas:

65

Es el estándar de la hora Unix.

El tiempo Unix, o tiempo POSIX, es un sistema para describir puntos en el tiempo, definido como el número de segundos transcurridos desde la medianoche del tiempo universal coordinado proléptico (UTC) del 1 de enero de 1970, sin contar los segundos intercalares.

soldado.moth
fuente
5
¿Sabes si Kernighan y Thompson expresaron alguna razón para elegir ese momento más allá de "Es un número un poco redondo antes de que comenzáramos a construir la cosa"?
dmckee --- ex-moderador gatito
Es el comienzo de un año, está en la zona horaria cero (zulú). Ambos simplifican el código de formato de fecha.
Donal Fellows
28
¿No cuenta los segundos intercalares? No conocía ese detalle. Después de pensarlo por unos momentos, puedo ver por qué lo harías de esa manera, pero hombre. mi mundo está destrozado. por 24 segundos.
Keturn
69

usando la fecha (1 de enero de 1970) como estándar predeterminado

La Pregunta hace dos suposiciones falsas:

  • Todo el seguimiento del tiempo en informática se realiza como un recuento desde 1970.
  • Dicho seguimiento es estándar.

Dos docenas de épocas

El tiempo en informática no siempre se registra desde el comienzo de 1970 UTC . Si bien esa referencia de época es popular, varios entornos informáticos a lo largo de las décadas han utilizado al menos casi dos docenas de épocas . Algunos son de otros siglos. Van desde el año 0 (cero) hasta 2001.

A continuación se muestran algunos.

0 de enero de 1 a.C.

1 de enero de 1 d.C.

15 de octubre de 1582

1 de enero de 1601

31 de diciembre de 1840

17 de noviembre de 1858

30 de diciembre de 1899

31 de diciembre de 1899

1 de enero de 1900

1 de enero de 1904

31 de diciembre de 1967

1 de enero de 1980

6 de enero de 1980

1 de enero de 2000

1 de enero de 2001

Unix Epoch Común, pero no dominante

El comienzo de 1970 es popular, probablemente debido a su uso por Unix. Pero de ninguna manera es tan dominante. Por ejemplo:

  • Innumerables millones (¿miles de millones?) De documentos de Microsoft Excel y Lotus 1-2-3 utilizan January 0, 1900(31 de diciembre de 1899).
  • El mundo ahora tiene más de mil millones de dispositivos iOS / OS X que utilizan la época Cocoa (NSDate) de 1 January 2001, GMT.
  • El sistema de navegación por satélite GPS utiliza January 6, 1980mientras que la alternativa europea utiliza Galileo22 August 1999 .

ISO 8601

Asumir que un conteo desde la época está usando la época de Unix abre una gran vulnerabilidad para los errores. Tal recuento es imposible de descifrar instantáneamente para un humano, por lo que los errores o problemas no se marcarán fácilmente al depurar y registrar. Otro problema es la ambigüedad de la granularidad que se explica a continuación.

Sugiero encarecidamente en su lugar serializar los valores de fecha y hora como cadenas ISO 8601 inequívocas para el intercambio de datos en lugar de un recuento de enteros desde la época: YYYY-MM-DDTHH:MM:SS.SSSZcomo 2014-10-14T16:32:41.018Z.

Cuenta de qué desde la época

Otro problema con el seguimiento del tiempo del recuento desde la época es la unidad de tiempo, con al menos cuatro niveles de resolución de uso común.

  • Segundos
    Las instalaciones originales de Unix usaban segundos enteros, lo que llevó al Problema del año 2038 cuando alcanzamos el límite de segundos desde 1970 si se almacena como un entero de 32 bits.
  • Milisegundos
    Usado por bibliotecas Java más antiguas, incluida la clase java.util.Date incluida y la biblioteca Joda-Time .
  • Microsegundos
    Usado por bases de datos como Postgres .
  • Nanosegundos
    Usado por el nuevo paquete java.time en Java 8.

Diagrama que muestra diferentes programas contando desde la época por segundos, milisegundos, microsegundos o nanosegundos.

Albahaca Bourque
fuente
1
Me pregunto cuál es la época dominante en este momento ... ¿lo basó en datos?
PascalVKooten
1
@PascalVKooten Se utilizan muchas épocas diferentes en muchos entornos y sistemas de software diferentes. Entonces no hay una época dominante. Mi punto aquí es nunca asumir la época. Conozca su fuente de datos. El mejor enfoque es que una fuente de datos evite por completo el problema de la época y solo use cadenas ISO 8601, en mi humilde opinión.
Basil Bourque
1
Gracias por su respuesta. Entiendo que hay muchos, pero tengo curiosidad por saber si, por ejemplo, POSIX se hizo más popular con el tiempo.
PascalVKooten
7

por qué siempre es el 1 de enero de 1970, porque - '1 de enero de 1970' normalmente llamado "fecha de época" es la fecha en la que comenzó la hora para las computadoras Unix, y esa marca de tiempo está marcada como '0'. Cualquier tiempo desde esa fecha se calcula en función del número de segundos transcurridos. En palabras más simples ... la marca de tiempo de cualquier fecha será la diferencia en segundos entre esa fecha y el '1 de enero de 1970' La marca de tiempo es solo un número entero que comenzó desde el número '0' en 'Medianoche 1 de enero de 1970' y continúa incrementándose por '1' en cada segundo paso Para la conversión de marcas de tiempo de UNIX a fechas legibles PHP y otros lenguajes de código abierto proporcionan funciones integradas.

Friyank
fuente
5

¿Hay alguna razón para usar la fecha (1 de enero de 1970) como estándar para la manipulación del tiempo?

No hay razón que importe.

El timemódulo de Python es la biblioteca C. Pregúntele a Ken Thompson por qué eligió esa fecha para una fecha histórica. Quizás fue el cumpleaños de alguien.

Excel usa dos épocas diferentes. ¿Alguna razón por la cual una versión diferente de Excel usa fechas diferentes?

A excepción del programador real, nadie más sabrá nunca por qué se tomaron ese tipo de decisiones.

Y...

No importa por qué se eligió la fecha. Simplemente fue.

Los astrónomos usan su propia fecha de época: http://en.wikipedia.org/wiki/Epoch_(astronomy)

¿Por qué? Se debe elegir una fecha para que las matemáticas funcionen. Cualquier fecha aleatoria funcionará.

Una fecha lejana en el pasado evita los números negativos para el caso general.

Algunos de los paquetes más inteligentes utilizan el año gregoriano proléptico 1. ¿Alguna razón por la cual el año 1?
Hay una razón dada en libros como Calendrical Calculations: matemáticamente es un poco más simple.

Pero si lo piensa bien, la diferencia entre 1/1/1 y 1/1/1970 es solo 1969, un desplazamiento matemático trivial.

S.Lott
fuente
1
Si se hubiera elegido 1/1/1, ya nos hubiéramos quedado sin segundos (2 ^ 31). Tal como está, nos enfrentamos a un problema similar al Y2K en 2038 para los sistemas operativos de 32 bits. en.wikipedia.org/wiki/Year_2038_problem
Chris Nava
1
@Chris Nava: La gente que usa 1/1/1 cuenta días, no segundos. 2 mil millones de días son aproximadamente 5 millones de años. A menudo mantienen un par (día, hora) para maximizar la resolución del tiempo; sólo hay 86400 segundos en la mayoría de los días.
S.Lott
@ S.Lott: Sí. Solo estaba señalando que dado que la mayoría del software cuenta segundos (no minutos) desde la época, 1/1/1 estaba demasiado lejos en el pasado para ser una fecha de inicio razonable. Por lo tanto, se eligió una fecha más reciente como la época de la informática (y por asociación el inicio de la revolución de las tecnologías de la información. ;-)
Chris Nava
@Chris Nava: ¿"la mayoría"? Supongo que por "la mayoría" te refieres a "Linux". Otros sistemas operativos no funcionan de la misma manera que Linux. La cuestión es que "razonable" y "¿por qué el 1/1/1970?" no son preguntas fáciles de responder; lo más importante, la respuesta no importa. "razonable" es cierto, pero no es la razón por qué . La razón de por qué es algo que sólo puede responder a Ken Thompson.
S.Lott
5

El 1 de enero de 1970, 00:00:00 am es el punto cero del tiempo POSIX .

Benjamin Bannier
fuente
2

P) "¿Por qué se calculan las fechas a partir del 1 de enero de 1970?"

A) Tenía que ser lo más reciente posible, pero incluir algo del pasado. Lo más probable es que no haya otra razón significativa, ya que mucha gente siente lo mismo.

Sabían que planteaba un problema si lo colocaban demasiado en el pasado y sabían que daría resultados negativos si era en el futuro. No había necesidad de profundizar más en el pasado, ya que lo más probable es que los acontecimientos tengan lugar en el futuro.

Notas: Los mayas, en cambio, tenían la necesidad de colocar los eventos en el pasado, ya que tenían el conocimiento de mucho pasado, para lo cual hicieron un calendario a largo plazo. Solo para colocar todos los fenómenos rutinarios en el calendario.

La marca de tiempo no fue pensada como un calendario, es una Época. Y creo que los mayas hicieron su calendario a largo plazo usando esa misma perspectiva. (lo que significa que sabían muy bien que no tenían ninguna relación con el pasado, solo tenían la necesidad de verlo en una escala mayor)

Yezpahr
fuente
1

Sí, C (y su familia). Aquí es donde Java también lo tomó.

Péter Török
fuente