Ao pensar em datas e horários - hoje é meia-noite no passado ou no futuro?


9

Isso sempre é um enigma para mim - e percebo que não é estritamente um problema de programação ou desenvolvimento de software, mas parece ser um problema comum em nosso campo.

Por exemplo, se eu definir uma data e hora de expiração como 08-04-2011 00:00:00 - e considerando que minha hora local atual é 10:45 no dia 8 - eu já expirei? Ou ainda tenho mais ou menos meio dia?

Existe um padrão universal a que fim do dia a 'meia-noite' pertence?

Ou devo pegar uma folha do exército britânico e dizer que o dia termina às 23:59:59 e começa às 00:00:01 e que não há meia-noite?


espere espere, onde é a sua localização? que data é agora? 08 ou 07?
Sufendy

sry - tornou claro que eu já estou no 8º (estou em Adelaide, SA)
HorusKol

11
Então você está basicamente perguntando se 00:00:00 é menor ou maior que 10:45:00?
Martin York

Eu pegaria a folha. Muitas organizações que lidam com agendas evitam 00:00:00 (e 12:00:00). Há também alguma confusão sobre os designadores de AM / PM para os países que não usam relógios de 24 horas.
dbasnett

Em alguns contextos, 24:00:00é usado para descrever a meia-noite no final do dia.
CodesInChaos

Respostas:


17

Eu acho que na programação (oracle e php, não tenho certeza sobre outras linguagens), meia-noite é o começo de um dia. Por exemplo, se você truncar (sysdate), receberá 2011-04-08 00:00:00 que é o nosso passado.

portanto, quando o relógio mudou de 23:59:59 para 00:00:00, a data realmente mudou de 08/04/2011 para 09/04/2011


2
Sim, o dia termina à meia-noite, que é 00:00:00.
quickly_now

Este é o AFAIK correto. Uma confusão pode ser que, no discurso casual, "meia-noite hoje" provavelmente signifique meia-noite no final de hoje, porque é mais provável que isso aconteça antes das pessoas irem para a cama do que depois que elas acordarem.
Jack V.

3

Um adendo à resposta de @Phelios, se você tiver um horário como 00:00:00, não é necessariamente exatamente meia-noite. Pelo contrário, é um conjunto infinitamente grande de pontos no tempo, que todos têm uma distância máxima de <1 segundo entre si. Por exemplo, todos os 00: 00: 00.345, 00: 00: 00.567 e 00: 00: 00.842 claramente se encontram no lado do novo dia da meia-noite, mas seriam reduzidos para "00:00:00" para fins de exibição. Da mesma forma, 23: 59: 59: 899 fica do lado antigo da meia-noite. Assim, a meia-noite em si é um intervalo de tempo infinitamente curto entre os dias que você nunca alcançará na prática.


Essa é uma vez que é importante destacar a diferença entre teoria e prática "alegada" : na prática, um usuário digitando uma data / hora mal pode se incomodar em digitar os segundos; e muito menos milissegundos. Na prática, um dispositivo de tempo que determine a hora de um evento pode não suportar milissegundos. Na prática, mesmo que um dispositivo de temporização suporte milissegundos, não há garantia de que o formato de armazenamento não arredonde / trunque uma parte do tempo por algum motivo.
Desiludido

1

Esse é um problema semelhante ao cálculo de diferenças entre ângulos usando geometria circular, onde, por exemplo, 0 graus e 360 ​​graus (e 720 graus, etc) são todos iguais. Então, qual é a diferença entre 350 e 10 graus?

Resposta: depende de como você deseja medi-lo - pode ser de 20 graus ou 340 graus. Mas fazer o cálculo para diferenças angulares é realmente bastante confuso. Os cálculos de diferença de horário são igualmente bagunçados, a menos que você converta para um formulário interno que faça a adição e subtração simples operar convencionalmente. Ou você usa uma biblioteca de classes moderna que esconde tudo de maneira mágica (e, portanto, nunca ensina ninguém sobre os detalhes reais).


em ambos os casos, você especificar apenas um caminho em volta do relógio (ou círculo) como 'positivo'
HorusKol

Verdade. No entanto, escrever o código para fazer o cálculo e acertar toda vez exige um pouco de reflexão.
quickly_now
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.