Como obter o carimbo de data / hora UTC em Ruby?
Como obter o carimbo de data / hora UTC em Ruby?
Respostas:
time = Time.now.getutc
Fundamentação: meus olhos, um carimbo de data e hora é exatamente isso: um ponto no tempo. Isso pode ser representado com precisão com um objeto. Se você precisar de mais alguma coisa, um valor escalar, por exemplo, segundos desde a época do Unix, intervalos de 100 ns desde 1601 ou talvez uma string para fins de exibição ou armazenamento do registro de data e hora em um banco de dados, você pode facilmente obtê-lo do objeto. Mas isso depende muito do uso pretendido.
Dizer que "um verdadeiro carimbo de data e hora é o número de segundos desde a época do Unix" está um pouco esquecido, pois essa é uma maneira de representar um ponto no tempo, mas também precisa de informações adicionais para saber que você está lidando com isso. um tempo e não um número. Um Time
objeto resolve esse problema perfeitamente, representando um ponto no tempo e também sendo explícito sobre o que é .
Você poderia usar: Time.now.to_i
.
A formatação padrão não é muito útil, na minha opinião. Prefiro a ISO8601, pois é selecionável, relativamente compacta e amplamente reconhecida:
>> require 'time'
=> true
>> Time.now.utc.iso8601
=> "2011-07-28T23:14:04Z"
/usr/share/ruby/2.0/time.rb
.
Geralmente, o timestamp não tem fuso horário.
% irb
> Time.now.to_i == Time.now.getutc.to_i
=> true
to_f
será melhor
se você precisar de um carimbo de data / hora legível por humanos (como a migração de trilhos) ex. " 20190527141340 "
Time.now.utc.to_formatted_s(:number) # using Rails
Time.now.utc.strftime("%Y%m%d%H%M%S") # using Ruby
Qual a vantagem de um registro de data e hora com sua granularidade em segundos? Acho muito mais prático trabalhar com isso Time.now.to_f
. Heck, você pode até jogar um to_s.sub('.','')
para se livrar do ponto decimal, ou realizar uma typecast como este: Integer(1e6*Time.now.to_f)
.
Integer(1e3*Time.now.to_f)
para que meu lado do servidor rubi timestamp era o mesmo que o javascript do lado do clienteDate.now()
Time.utc(2010, 05, 17)
time = Time.zone.now()
Funcionará como
irb> Time.zone.now
=> 2017-12-02 12:06:41 UTC
A maneira correta é fazer um Time.now.getutc.to_i
para obter a quantidade correta de carimbo de data / hora, pois simplesmente exibir o número inteiro nem sempre precisa ser igual ao carimbo de data / hora utc devido a diferenças de fuso horário.