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?

HorusKol
fonte
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

Sufendy
fonte
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.

T-Bull
fonte
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).

rapid_now
fonte
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