
Esta questão é baseada nas observações deAdamVema resposta delesobreComo coloco o nome do dia em uma célula do Excel?
Quando A1 tem o valor 01/08/2009, então:
=WEEKDAY(A1)
obterá7
=TEXT(7, "dddd")
obteráSaturday
=TEXT(7,"dddd, yyyy-mm-dd")
obteráSaturday, 1900-01-07
=TEXT(1,"dddd, yyyy-mm-dd")
obteráSunday, 1900-01-01
=TEXT("1900-01-01","dddd, yyyy-mm-dd")
também obteráSunday, 1900-01-01
Os dois últimos estão errados: 1º de janeiro de 1900 é na verdade uma segunda-feira.
Várias fontes parecem confirmar isso:
- Janeiro de 1900 – Wikipedia, a enciclopédia gratuita.
- Calendário do ano 1900 – Holanda.
- Calendário do ano 1900 – Estados Unidos.
o que estou perdendo? Por que o Excel está fazendo isso errado?
Responder1
Conforme descrito na MicrosoftKB 214058:
Os dias da semana anteriores a 1º de março de 1900 estão incorretos no Excel
MAIS INFORMAÇÕES
Quando o sistema de datas do Microsoft Excel foi originalmente criado, ele foi projetado para ser totalmente compatível com sistemas de datas usados por outros programas de planilhas.
No entanto, neste sistema de datas, o ano de 1900 é interpretado incorretamente como um ano bissexto. Como não há 29 de fevereiro ("dia bissexto") no ano de 1900, o dia da semana para qualquer data anterior a 1º de março de 1900 (o dia seguinte ao "dia bissexto") não é computado corretamente.
Os "outros programas de planilhas" referem-se aLótus 1-2-3, que era bastante popular naquela época, e presumiu incorretamente que o ano de 1900 era um ano bissexto. Isto é explicado ainda mais detalhadamente emKB 214326:
O Excel 2000 assume incorretamente que o ano de 1900 é um ano bissexto
MAIS INFORMAÇÕES
Quando o Lotus 1-2-3 foi lançado pela primeira vez, o programa presumiu que o ano de 1900 era um ano bissexto, embora na verdade não fosse um ano bissexto. Isso tornou mais fácil para o programa lidar com anos bissextos e não causou danos a quase todos os cálculos de datas no Lotus 1-2-3.
Quando o Microsoft Multiplan e o Microsoft Excel foram lançados, eles também presumiram que 1900 era um ano bissexto. Essa suposição permitiu que o Microsoft Multiplan e o Microsoft Excel usassem o mesmo sistema de data serial usado pelo Lotus 1-2-3 e fornecessem maior compatibilidade com o Lotus 1-2-3. Tratar 1900 como um ano bissexto também tornou mais fácil para os usuários moverem planilhas de um programa para outro.
Embora seja tecnicamente possível corrigir este comportamento para que as versões actuais do Microsoft Excel não assumam que 1900 é um ano bissexto, as desvantagens de o fazer superam as vantagens.
Se esse comportamento fosse corrigido, muitos problemas surgiriam, incluindo os seguintes:
- Quase todas as datas nas planilhas atuais do Microsoft Excel e outros documentos seriam diminuídas em um dia. Corrigir esta mudança exigiria tempo e esforço consideráveis, especialmente em fórmulas que utilizam datas.
- Algumas funções, como a função WEEKDAY, retornariam valores diferentes; isso pode fazer com que as fórmulas nas planilhas funcionem incorretamente.
- A correção desse comportamento quebraria a compatibilidade de data serial entre o Microsoft Excel e outros programas que usam datas.
Se o comportamento permanecer sem correção, ocorrerá apenas um problema:
- A função WEEKDAY retorna valores incorretos para datas anteriores a 1º de março de 1900. Como a maioria dos usuários não usa datas anteriores a 1º de março de 1900, esse problema é raro.
Responder2
Aqui está o motivo explicado pelo próprio Joel:Minha primeira análise do BillG
O Basic usa 31 de dezembro de 1899 como época em vez de 1º de janeiro de 1900, mas por algum motivo, a data de hoje era a mesma no Excel e no Basic.
Huh?
Procurei um desenvolvedor Excel que tivesse idade suficiente para lembrar o porquê. Ed Fries parecia saber a resposta.
"Ah", ele me disse. "Confira 28 de fevereiro de 1900."
“São 59”, eu disse.
"Agora tente 1º de março."
“São 61!”
"O que aconteceu com 60?" Ed perguntou.
"29 de fevereiro. 1900 foi um ano bissexto! É divisível por 4!"
“Bom palpite, mas sem charuto”, disse Ed, e me deixou pensando por um tempo.
Ops. Eu fiz algumas pesquisas. Anos divisíveis por 100 não são anos bissextos, a menos que também sejam divisíveis por 400.
1900 não foi um ano bissexto.
"É um bug no Excel!" exclamei.
“Bem, na verdade não”, disse Ed. "Tivemos que fazer isso dessa maneira porque precisávamos importar planilhas do Lotus 123."
"Então, é um bug no Lotus 123?"
"Sim, mas provavelmente intencional. A Lotus teve que caber em 640K. Isso não é muita memória. Se você ignorar 1900, poderá descobrir se um determinado ano é um ano bissexto apenas olhando para ver se os dois bits mais à direita são zero. Isso é muito rápido e fácil. Os caras da Lotus provavelmente pensaram que não importava estar errado naqueles dois meses no passado.
Responder3
Uma solução para isto é adicionar 400 anos ao ano, para calcular o dia da semana como na seguinte fórmula:
=WEEKDAY(DATE(A4+400,B4,C4),1)
Então as seguintes variáveis
A4 = 1834
B4 = 12
C4 = 14
retornaria 1
(domingo), que é o mesmo de 14 de dezembro de 2234.
Isso deixa de funcionar para datas anteriores 1753
, o ano após a mudança para o calendário gregoriano.