Trechos de timestamp Unix em Ruby
Exemplos de Ruby para obter segundos Unix, derivar milissegundos, converter timestamps em objetos Time, formatar a saída UTC e parsear strings de data.
Time.now.to_i(Time.now.to_f * 1000).roundTime.at(1700000000)require "time"
Time.at(1700000000).utc.strftime("%Y-%m-%d %H:%M:%S")
# With tzinfo gem:
require "tzinfo"
tz = TZInfo::Timezone.get("America/New_York")
tz.utc_to_local(Time.at(1700000000).utc)Time.at(1700000000).strftime("%Y-%m-%d %H:%M:%S")require "time"
Time.parse("2023-11-15T06:13:20Z").to_iNoções básicas de marcas de tempo em Ruby
O Time.now.to_i do Ruby retorna segundos Unix. Use Time.now.to_f quando precisar de frações de segundo ou quiser calcular milissegundos para APIs que esperam marcas de tempo no estilo JavaScript.
Convertendo e formatando Time em Ruby
Use Time.at(timestamp) para criar um objeto Time a partir de segundos Unix. Chame utc antes de formatar quando precisar de uma saída estável que não dependa do fuso local da máquina.
Notas de produção para Ruby
Os métodos Time do Ruby são concisos, mas os padrões de fuso podem variar entre laptops, servidores e workers em segundo plano. Mantenha as marcas de tempo persistidas em segundos Unix ou strings UTC e depois aplique o fuso da aplicação na camada de apresentação. Ao analisar a entrada do usuário, inclua o deslocamento ou o fuso para que as regras de horário de verão não sejam adivinhadas incorretamente.
- Use Time.now.to_i para segundos Unix
- Use (Time.now.to_f * 1000).round para valores em milissegundos
- Use Time.at(seconds).utc para uma saída UTC estável
- Use Time.parse apenas com strings que incluam um fuso ou um deslocamento
FAQ
- Time.now.to_i retorna milissegundos?
- Não. Time.now.to_i retorna segundos Unix inteiros. Use Time.now.to_f se precisar de frações de segundo ou quiser derivar milissegundos.
- Por que chamar utc antes de formatar?
- utc torna a saída independente do fuso local da máquina. Isso ajuda com logs, payloads de API e expectativas de teste.
- Como verifico uma marca de tempo em Ruby?
- Use Time.at(seconds).utc.iso8601 e compare o resultado com o momento UTC esperado antes de escrever o valor em um job, API ou banco de dados.