Por que essa pergunta básica aparece o tempo todo
Eu vejo gente perguntando isso em fóruns de programação, em threads de física e até em dúvidas de concursos. A resposta é simples na superfície, mas tem armadilhas que as pessoas ignoram até receberem um bug ou uma resposta errada num experimento.
quantos milissegundos tem um segundo
Um segundo tem exatamente 1.000 milissegundos. A notação é ms, e o prefixo "milí" vem do sistema métrico, indicando um décimo de cento. Isso é definido pelo SI (Sistema Internacional de Unidades) desde 1960, e não há margem de interpretação: 1 s = 10³ ms = 1.000 ms. Na prática, quando você trabalha com código, a coisa fica mais complicada do que parece. Eu tive um problema há alguns anos num projeto de medição de latência de rede. Estávamos usando Java e capturando timestamps com `System.currentTimeMillis()`. O relatório final mostrava latências inconsistentes, com variações estranhas de cerca de 15 milissegundos em algumas leituras. O que acontecia era que o relógio do sistema operacional não tinha granularidade suficiente em certos contextos de suspensão e retomada de threads. A solução foi migrar para `System.nanoTime()`, que usa um contador de alta resolução independente do relógio do wall-clock. Isso corrigiu as discrepâncias quase que imediatamente.
👉 Clique no botão abaixo para saber mais sobre o assunto!
O detalhe importante aqui é que existem dois tipos de "segundo" que as pessoas confundem. O segundo SI, que é a unidade base do tempo e corresponde a exatamente 9.192.631.770 períodos da radiação emitida pela transição hiperfina do césio-133 no estado fundamental. Esse é o segundo que você usa para converter para milissegundos. Depois existe o segundo solar médio, que varia levemente ao longo do ano por causa da excentricidade orbital da Terra. Para a grande maioria das aplicações — programação, engenharia, física aplicada — você só se importa com o segundo SI. Outro ponto que passa despercebido: a conversão de segundos para milissegundos em sistemas embarcados. Se você está num microcontrolador com aritmética de ponto flutuante cara ou indisponível, multiplicar por 1.000 pode ser mais lento do que fazer deslocamentos de bits combinados com adições, dependendo da arquitetura. Em ARM Cortex-M sem FPU, por exemplo, uma multiplicação de 32 bits pode levar vários ciclos de clock, enquanto uma sequência de shift-and-add para 1.000 (que é 1024 - 24, ou 2¹ - 3·2³) pode ser otimizada pelo compilador. Não é algo que faça diferença em 99% dos casos, mas quando você está mandando pacotes em tempo real e cada ciclo conta, isso importa.
Existe também a questão dos milissegundos fracionários. Se você precisar representar um fração de milissegundo, aí entra o uso de microssegundos (µs) ou nanosegundos (ns). Um segundo equivale a 1.000.000 de microssegundos e 1.000.000.000 de nanosegundos. Em APIs de timestamp modernos, como o POSIX `clock_gettime(CLOCK_MONOTONIC, ...)` ou o Windows `QueryPerformanceCounter()`, a resolução geralmente é na casa dos nanosegundos, mesmo que a precisão prática seja menor. Ignorar esses sub-milissegundos pode introduzir erros de arredondamento acumulativos em loops de controle ou em simulações de física. A conversão inversa também causa confusão. Pegar milissegundos e transformar em segundos requer divisão por 1.000, mas em ponto fixo isso significa divisão por potências de 2 se você quiser evitar floating point. Dividir por 1.000 exato em aritmética inteira exige uma multiplicação pelo inverso fixo, que é aproximadamente 0x00004001 (ou 1/1000 em representação_Q31). Isso é usado em DSPs e código de baixo nível onde divisão inteira é proibitivamente lenta. Se você estiver num ambiente que permite ponto flutuante, obviamente basta dividir por 1000.0 e pronto.
Resumindo sem resumar: 1 segundo = 1.000 milissegundos. É uma definição pura do SI. O que torna isso útil saber não é a conta em si, mas entender quando e como ela se aplica no mundo real, especialmente em sistemas que exigem precisão temporal.