Por que uma data do século XVII é possível?
O Windows não armazena registros de data e hora de modificação de arquivos, como os sistemas Unix . De acordo com o Windows Dev Center (ênfase minha):
Um horário do arquivo é um valor de 64 bits que representa o número de intervalos de 100 nanossegundos decorridos desde as 00:00 de 1º de janeiro de 1601, horário universal coordenado (UTC). O sistema registra os horários dos arquivos quando os aplicativos criam, acessam e gravam nos arquivos.
Portanto, definindo um valor errado aqui, você pode facilmente obter datas do século XVII.
Obviamente, outra questão importante é: como esse valor foi definido? Qual é a data real? Eu acho que você nunca será capaz de descobrir, pois isso poderia ter sido simplesmente um erro de cálculo no driver do sistema de arquivos. Outra resposta sugere que a data é realmente um carimbo de data / hora do Unix interpretado como um carimbo de data / hora do Windows, mas na verdade eles são calculados em intervalos diferentes (segundos vs. nanossegundos).
Como isso se relaciona com o problema do ano 2038?
O uso de um tipo de dados de 64 bits significa que o Windows (geralmente) não é afetado pelo Problema do Ano 2038 que os sistemas Unix tradicionais têm, pois o Unix usava inicialmente um número inteiro de 32 bits, que transborda mais cedo que o número inteiro de 64 bits que o Windows tem. (Isso ocorre apesar do Unix operar em segundos e do Windows operar em micro / nanossegundos.)
O Windows ainda é afetado ao usar programas de 32 bits que foram compilados com versões antigas do Visual Studio, é claro.
Os sistemas operacionais Unix mais recentes já expandiram o tipo de dados para 64 bits, evitando assim o problema. (De fato, como os carimbos de data e hora do Unix operam em segundos, a nova data abrangente será de 292 bilhões de anos a partir de agora.)
Qual é a data máxima que pode ser definida?
Para os curiosos - veja como calcular isso:
- O número de valores possíveis em um número inteiro de 64 bits é 2 63 - 1 = 9223372036854775807 .
- Cada marca representa 100 nanossegundos, ou seja, 0,1 µs ou 0,0000001 s.
- O intervalo de tempo máximo seria 9223372036854775807 ± 0,0000001 s , portanto, centenas de bilhões de segundos.
- Uma hora tem 3600 segundos, um dia tem 86400 segundos e um ano tem 365 dias; portanto, existem 86400 × 365 s = 31536000 s em um ano. É claro que isso é apenas uma média, ignorando anos bissextos, segundos bissextos ou qualquer mudança de calendário que futuros regimes pós-apocalípticos possam ditar nos demais terráqueos.
- 9223372036854775807 ⨉ 0,0000001 s / 31536000 s ≈ 29247 anos
@corsiKa
explica como podemos subtrair anos bissextos: 29247/365/4 ≈ 20
- Portanto, seu ano máximo é 1601 + 29247 - 20 = 30828 .
Algumas pessoas realmente tentaram definir isso e criaram o mesmo ano.