English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby Data & Tempo (Date & Time)

Time A classe no Ruby é usada para representar data e hora. Ela é baseada na data e hora do sistema fornecida pelo sistema operacional. A classe pode não poder representar 1970 anos antes ou 2038 Data após o ano.

Este tutorial o tornará familiar com todos os conceitos importantes de data e hora.

Criar a data e hora atuais

A seguir está um exemplo simples de como obter a data e hora atuais:

Exemplo online

#!/usr/bin/ruby -w
# -*- coding: UTF-8 -*-
 
time1 = Time.new
 
puts "Hora atual : " + time1.inspect
 
# Função igual a Time.now
time2 = Time.now
puts "Hora atual : " + time2.inspect

O resultado de execução do exemplo acima é:

Hora atual : 2015-09-17 15:23:14 +0800
Hora atual : 2015-09-17 15:23:14 +0800

para obter componentes de Data & Hora

Podemos usar Time Objeto para obter vários componentes de data e hora. Veja os exemplos a seguir:

Exemplo online

#!/usr/bin/ruby -w
# -*- coding: UTF-8 -*-
 
time = Time.new
 
# Componentes do Time
puts "Hora atual : " + time.inspect
puts time.year				# => ano da data
puts time.month				# => mês da data (1 a 12)
puts time.day				# => dia do mês (1 a 31)
puts time.wday				# => dia da semana da semana (0 é domingo)
puts time.yday				# => 365:o dia do ano
puts time.hour				# => 23:24 horário
puts time.min				# => 59
puts time.sec				# => 59
puts time.usec				# => 999999:microsegundos
puts time.zone				# => "UTC": nome da zona horária

O resultado de execução do exemplo acima é:

Hora atual : 2015-09-17 15:24:44 +0800
2015
9
17
4
260
15
24
44
921519
CST

Time.utcTime.gm e Time.local função

Essas funções podem ser usadas para formatar datas e horários em formatos padrão, conforme mostrado a seguir:

# julho 8, 2008
Time.local(2008, 7, 8)  
# julho 8, 2008, 09:10am, hora local
Time.local(2008, 7, 8, 9, 10)   
# julho 8, 2008, 09:10 UTC
Time.utc(2008, 7, 8, 9, 10)  
# julho 8, 2008, 09:10:11 GMT (igual a UTC)
Time.gm(2008, 7, 8, 9, 10, 11)

O exemplo a seguir obtém todos os componentes no array:

[sec, min, hour, day, month, year, wday, yday, isdst, zone]

Tente o exemplo a seguir:

Exemplo online

#!/usr/bin/ruby -w
 
time = Time.new
 
values = time.to_a
p values

O resultado de execução do exemplo acima é:

[39, 25, 15, 17, 9, 2015, 4, 260, false, "CST"]

Este array pode ser passado para Time.utc ou Time.local Função para obter diferentes formatos de data, conforme mostrado a seguir:

Exemplo online

#!/usr/bin/ruby -w
 
time = Time.new
 
values = time.to_a
puts Time.utc(*values)

O resultado de execução do exemplo acima é:

2015-09-17 15:26:09 UTC

A seguir estão as maneiras de obter a data e hora, os segundos desde a era (relacionados ao plataforma):

# Devolve os segundos desde a era
time = Time.now.to_i  
 
# Converte os segundos em objeto Time
Time.at(time)
 
# Devolve os segundos desde a era, incluindo microsegundos
time = Time.now.to_f

zonas horárias e horário de verão

Você pode usar Time para obter todas as informações sobre a zona horária e o horário de verão, conforme mostrado a seguir:

time = Time.new
 
# Aqui está a explicação
time.zone       # => "UTC": Retornar a zona horária
time.utc_offset # => 0: UTC é o deslocamento de 0 segundos em relação ao UTC
time.zone       # => "PST" (ou outra zona horária)
time.isdst      # => false: Se UTC não tiver DST (horário de verão)
time.utc?       # => true: Se estiver na zona horária UTC
time.localtime  # Converter para a zona horária local
time.gmtime     # Converter para UTC
time.getlocal   # Retornar um novo objeto Time na zona horária local
time.getutc     # Retornar um novo objeto Time no UTC

Formatação de tempo e data

Existem várias maneiras de formatar a data e a hora. Abaixo estão alguns exemplos que demonstram parte deles:

Exemplo online

#!/usr/bin/ruby -w
time = Time.new
 
puts time.to_s
puts time.ctime
puts time.localtime
puts time.strftime("%Y-%m-%d %H:%M:%S)

O resultado de execução do exemplo acima é:

2015-09-17 15:26:42 +0800
Thu Set 17 15:26:42 2015
2015-09-17 15:26:42 +0800
2015-09-17 15:26:42

Instruções de formatação de tempo

As instruções e métodos listados na tabela a seguir Time.strftime usados juntos.

ComandoDescrição
%aAbreviação do nome do dia da semana (por exemplo, Sun).
%ANome completo do dia da semana (por exemplo, Domingo).
%bAbreviação do nome do mês (por exemplo, Jan).
%BNome completo do mês (por exemplo, Janeiro).
%cRepresentação preferida da data e hora local.
%dNúmero do dia no mês (01 a 31)
%HNúmero da hora no dia,24 Sistema horário (00 a 23)
%INúmero da hora no dia,12 Sistema horário (01 a 12)
%jNúmero do dia do ano (001 a 366)
%mNúmero do mês do ano (01 a 12)
%MNúmero do minuto no hora (00 a 59)
%pIndicação da meridiana (AM ou PM).
%SNúmero do segundo no minuto (00 ou 60).
%UNúmero da semana do ano, começando pela primeira domingo (considerado o primeiro dia da primeira semana) (00 a 53)
%WNúmero da semana do ano, começando pela primeira segunda-feira (considerada a primeira semana) (00 a 53)
%wQual dia da semana (Sunday é 0, 0 a 6)
%xFormato preferencial sem hora e apenas data.
%XFormato preferencial sem data e apenas hora.
%yAno sem século (00 a 99)
%YAno com século.
%ZNome do Fuso Horário.
%%% Caracter.

Algoritmos de Tempo

Você pode fazer cálculos simples com tempo, como mostrado a seguir:

now = Time.now           # Tempo atual
puts now
 
past = now - 10          # 10 Segundos antes. Time - number => Time
puts past
 
future = now + 10        # A partir de agora 10 Segundos após. Time + number => Time
puts future
 
diff = future - now      # => 10  Time - Time => Segundos
puts diff

O resultado de execução do exemplo acima é:

2015-09-17 15:27:08 +0800
2015-09-17 15:26:58 +0800
2015-09-17 15:27:18 +0800
10.0