Al pensar en fechas y horas, ¿es medianoche hoy en el pasado o en el futuro?

9

Esto siempre es un rompecabezas para mí, y me doy cuenta de que no es estrictamente un problema en la programación o el desarrollo de software, pero parece ser un problema común razonable en nuestro campo.

Por ejemplo, si tuviera que establecer una fecha y hora de vencimiento como 2011-04-08 00:00:00, y dado que mi hora local actual es las 10:45 del día 8, ¿ya he expirado? ¿O todavía me queda medio día más o menos?

¿Existe un estándar universal para el final del día al que "pertenece" la medianoche?

¿O debería tomar una hoja del ejército británico y decir que el día termina a las 23:59:59 y comienza a las 00:00:01 y que no hay medianoche?

HorusKol
fuente
espera espera, ¿dónde está tu ubicación? que fecha es ahora 08 o 07?
Sufendy
sry - dejó en claro que ya estoy en el 8 (estoy en Adelaide, SA)
HorusKol
1
Entonces, ¿básicamente pregunta si 00:00:00 es más pequeño o más grande que 10:45:00?
Martin York
Tomaría la hoja. Muchas organizaciones que se ocupan de horarios evitan las 00:00:00 (y las 12:00:00). También existe cierta confusión sobre los designadores de AM / PM para aquellos países que no usan relojes de 24 horas.
dbasnett
En algunos contextos 24:00:00se usa para describir la medianoche al final del día.
CodesInChaos

Respuestas:

17

Creo que en la programación (Oracle y PHP, no estoy seguro sobre otros idiomas), la medianoche es el comienzo de un día. Por ejemplo, si usted trunc (sysdate) obtendrá 2011-04-08 00:00:00, que es nuestro pasado.

entonces, cuando el reloj cambió de 23:59:59 a 00:00:00, la fecha realmente cambió de 2011-04-08 a 2011-04-09

Sufendy
fuente
2
Sí, el día pasa a la medianoche, que es 00:00:00.
rapid_now
Esto es correcto AFAIK. Una confusión puede ser que en el discurso casual, "medianoche hoy" probablemente significa medianoche al final de hoy, porque es más probable que sea antes de que las personas se vayan a la cama, que después de que se despierten.
Jack V.
3

Una adición a la respuesta de @Phelios, si tiene un horario como 00:00:00, esto no es necesariamente exactamente la medianoche. Más bien, es un conjunto infinitamente grande de puntos en el tiempo, que tienen una distancia máxima de <1 segundo entre sí. Por ejemplo, todas las 00: 00: 00.345, 00: 00: 00.567 y 00: 00: 00.842 se encuentran claramente en el lado del nuevo día de la medianoche, pero se acortarán a "00:00:00" para fines de visualización. Del mismo modo, 23: 59: 59: 899 se encuentra en el lado antiguo de la medianoche. Por lo tanto, la medianoche en sí es un lapso de tiempo infinitamente corto entre los días que nunca alcanzarás en la práctica.

T-Bull
fuente
Esta es una vez que es importante señalar la diferencia entre la teoría y la práctica "supuesta" : en la práctica, un usuario que escribe una fecha / hora apenas podría molestarse en escribir los segundos; y mucho menos milisegundos. En la práctica, un dispositivo de temporización que determina el tiempo de un evento podría no soportar milisegundos. En la práctica, incluso si un dispositivo de temporización admite milisegundos, no hay garantía de que el formato de almacenamiento no redondea / trunca una parte del tiempo por alguna razón.
Desilusionado
1

Este es un problema similar al cálculo de diferencias entre ángulos usando geometría circular, donde, por ejemplo, 0 grados y 360 grados (y 720 grados, etc.) son todos iguales. Entonces, ¿cuál es la diferencia entre 350 grados y 10 grados?

Respuesta: depende de la forma en que desee medirlo: puede ser de 20 grados o 340 grados. Pero hacer el cálculo de las diferencias angulares es bastante complicado. Los cálculos de diferencia horaria son igualmente desordenados a menos que los convierta a una forma interna que haga que la suma y la resta simples funcionen de manera convencional. O usa una biblioteca de clase moderna que mágicamente lo oculta todo de usted (y por lo tanto nunca le enseña a nadie sobre los detalles reales).

rápidamente_ahora
fuente
en ambos casos, usted especifica solo una forma durante todo el día (o círculo) como 'positivo'
HorusKol
Cierto. Sin embargo, escribir el código para hacer el cálculo y hacerlo bien cada vez requiere un poco de reflexión.
rapid_now