Data e Hora

Funções da Linguagem R

Mapa das Zonas Horárias do Mundo,
Mapa das Zonas Horárias do Mundo, via Wikimedia Commons

Na linguagem R existem várias maneiras de se tratar apenas a data, ou data e hora juntos.

A função interna as.Date é, na verdade, um conjunto de funções que fazem a conversão entre cadeias de caracteres e objetos da classe Date, que representa datas do calendário.

> # Guerra das Malvinas
> guerra_malvinas_inicio <- as.Date("2 Abril 1982", format="%d %B %Y")
> guerra_malvinas_fim <- as.Date("14 Junho 1982", format="%d %B %Y")
> guerra_malvinas <- c(guerra_malvinas_inicio, guerra_malvinas_fim)
> print(guerra_malvinas)
[1] "1982-04-02" "1982-06-14"
> guerra_malvinas <- as.Date(c("2 Abril 1982","14 Junho 1982"), format="%d %B %Y")
> print(guerra_malvinas)
[1] "1982-04-02" "1982-06-14"
> class(guerra_malvinas_inicio)
[1] "Date"
> typeof(guerra_malvinas_inicio)
[1] "double"
> # Duração da guerra
> difftime(guerra_malvinas_fim, guerra_malvinas_inicio)
Time difference of 73 days
> diff(guerra_malvinas)
Time difference of 73 days

Formato:

Código Valor
%d Dia do mês (decimal)
%m Mês (decimal)
%b Mês (abreviado)
%B Mês (extenso)
%y Ano (2 dígitos)
%Y Ano (4 dígitos)

A biblioteca contribuída “chron: Chronological Objects which can Handle Dates and Times” disponibiliza objetos cronológicos que lidam com datas e horas. A implementação atual dos objetos do chron não trata as zonas horárias nem o horário de verão.

chron(dates., times., format = c(dates = "m/d/y", times = "h:m:s"),out.format, origin.)

onde:

  • dates.
    • vetor numérico ou de caracteres especificando a data
  • times.
    • vetor numérico ou de caracteres, opcional, especificando a hora do dia
  • format
    • vetor ou lista especificando o formato da entrada
  • out.format
    • vetor ou lista especificando o formato da saída
  • origin.
    • vetor que especifica a data em relação a qual as datas julianas são calculadas

Formato:

Código Valor
d Dia do mês (decimal)
m Mês (decimal)
mon Mês (abreviado)
month Mês (extenso)
y Ano (4 dígitos)
h Hora
m Minuto
s Segundo

Início das estações do ano de 2019 - INMET:

> # Carregar a biblioteca chron
> library("chron")
> # Início das Estações - 2019
> # Outono    20 Mar 2019 - 18:58h
> # Inverno   21 Jun 2019 - 12:54h
> # Primavera 23 Set 2019 - 04:50h
> # Verão     22 Dez 2019 - 01:19h
> datas = dates(c("20 Mar 2019","21 Jun 2019","23 Sep 2019","22 Dec 2019"),
+               format=("d mon y"))
> horas = times(c("18:58:00","12:54:00","04:50:00","01:19:00"))
> estações <- chron(dates = datas, times = horas)
> estações
[1] (03/20/19 18:58:00) (06/21/19 12:54:00) (09/23/19 04:50:00)
[4] (12/22/19 01:19:00)
> # Número de dias do Outono
> estações[2] - estações[1]
Time in days:
[1] 92.74722
> # Número de dias da Primavera
> estações[4] - estações[3]
Time in days:
[1] 89.85347
> # Número de dias do Outono, Inverno e Primavera
> diff(estações)
Time in days:
[1] 92.74722 93.66389 89.85347

As classes POSIXct e POSIXlt associam datas e horas com suas respectivas zonas horárias.

  • A classe POSIXct armazena os valores de data e hora como o número de segundos decorridos desde 1º de janeiro de 1970;
  • A classe POSIXlt armazena os valores de data e hora como uma lista, com elementos para segundo, minuto, hora, dia, mês e ano, entre outros.

O formato de entrada padrão para datas POSIX consiste no ano, seguido pelo mês e dia, separados por barras ou hifens; para valores de data e hora, a data pode ser seguida por espaço em branco e a hora no formato hora:minutos:segundos ou hora:minutos:

> # Hora do sistema
> Sys.time() # Portugal, horário de verão (hora local, GMT+1)
[1] "2019-09-05 08:16:24 WEST"
> as.POSIXlt(Sys.time(), "Portugal") # Hora em Portugal
[1] "2019-09-05 08:16:24 WEST"
> as.POSIXlt(Sys.time(), "Brazil/East") # Hora em Brasília (GMT-3)
[1] "2019-09-05 04:16:24 -03"
> as.POSIXlt(Sys.time(), "America/New_York")  # Hora em Nova York (GMT-4)
[1] "2019-09-05 03:16:24 EDT"
> # Guerra das Malvinas
> guerra_malvinas_inicio <- as.POSIXlt("1982/04/02")
> guerra_malvinas_inicio
[1] "1982-04-02 WEST"
> guerra_malvinas_inicio <- as.POSIXlt("1982/04/02", tz="America/Argentina/Buenos_Aires")
> guerra_malvinas_inicio
[1] "1982-04-02 -03"
> guerra_malvinas_fim <- as.POSIXlt("1982-06-14", tz="America/Argentina/Buenos_Aires")
> guerra_malvinas_fim
[1] "1982-06-14 -03"
> guerra_malvinas <- c(guerra_malvinas_inicio, guerra_malvinas_fim)
> guerra_malvinas
[1] "1982-04-02 04:00:00 WEST" "1982-06-14 04:00:00 WEST"
> # Duração da guerra
> guerra_malvinas_fim - guerra_malvinas_inicio
Time difference of 73 days
> diff(guerra_malvinas)
Time difference of 73 days
> # Início da Primavera de 2019
> as.POSIXct(strptime("2019-09-23 04:50 -0300", "%Y-%m-%d %H:%M %z"))
[1] "2019-09-23 08:50:00 WEST"
> ISOdate(2019,09,23,4,50, tz="Brazil/East")
[1] "2019-09-23 04:50:00 -03"

Notas:

  1. Uma zona horária é uma região do globo que adota um horário padrão uniforme para fins legais, comerciais e sociais. Argentina, Brasil (Distrito Federal e a maioria dos estados), Região de Magalhães no Chile, Guiana Francesa, Paraguai, Ilhas Malvinas, Suriname e Uruguai adotam como horário padrão UTC-3. Espanha, Islândia, Irlanda, Portugal (Continental e Madeira), Reino Unido e vários países africanos adotam como horário padrão UTC+0.
  2. Para listar as zonas horárias disponíveis no sistema use o comando ls /usr/share/zoneinfo/ e navegue pelos subdiretórios.
  3. Instalação da biblioteca chron (Chronological Objects which can Handle Dates and Times) como superusuário, para fazer a instalação no diretório /usr/local/lib/R/site-library:
pi@raspberrypi:~ $ sudo R
> # Instalação da biblioteca chron
> install.packages("chron")
Installing package into/usr/local/lib/R/site-library(aslibis unspecified)
tentando a URL 'https://cloud.r-project.org/src/contrib/chron_2.3-56.tar.gz'
Content type 'application/x-gzip' length 37657 bytes (36 KB)
==================================================
downloaded 36 KB
...

Referências: