Data.table: IDateTime informa a data errada se a hora for maior que 15:59 (tz = "America / Los_Angeles")

Criado em 15 jan. 2016  ·  5Comentários  ·  Fonte: Rdatatable/data.table

IDateTime () gera data errada se a parte da hora for maior que 15:59 (tz = "America / Los_Angeles")
A conversão de todos os registros que têm a hora em / após 15:59 do meu fuso horário.

Detalhes do problema em:
http://stackoverflow.com/questions/34786887/why-does-idatetime-convert-to-the-wrong-date

Dados no arquivo FiveMinute.csv:
Tempo, alto, baixo, aberto, fechado, vol
2016/01/13 11: 00,4.8100,4.7875,4.8050,4.7900.543
2016/01/13 11: 05,4.7950,4.7825,4.7900,4.7925.781
2016/01/13 11: 10,4.7925,4.7750,4.7925,4.7775.2787
2016/01/13 11: 15,4.7850,4.7775,4.7800,4.7800.659
2016/01/13 17: 00,4.7800,4.7700,4.7800,4.7700.371
2016/01/13 17: 05,4.7750,4.7700,4.7700,4.7700.158
2016/01/13 17: 10,4.7675,4.7550,4.7675,4.7550.288

Roteiro R:
biblioteca (data.table)
csv1 = "FiveMinute.csv"
dt = fread (csv1)
dput (dt)

as.POSIXct não muda a data

as.POSIXct (dt $ Time)
as.POSIXct (dt $ Time, "% Y /% m /% d% H:% M", tz = "")

essas chamadas produzem saída incorreta

IDateTime (as.POSIXct (dt $ Time))
IDateTime (as.POSIXct (dt $ Time, tz = ""))
IDateTime (as.POSIXct (dt $ Time, tz = "America / Los_Angeles"))
IDateTime (as.POSIXct (dt $ Time, "% Y /% m /% d% H:% M", tz = ""))
IDateTime (as.POSIXct (dt $ Time, "% Y /% m /% d% H:% M", tz = "America / Los_Angeles"))
dput (IDateTime (as.POSIXct (dt $ Time, "% Y /% m /% d% H:% M", tz = "America / Los_Angeles")))
dput (IDateTime (as.POSIXct (dt [, Time], "% Y /% m /% d% H:% M", tz = "America / Los_Angeles")))

Sistema: Win10x64 R 3.2.2 data.table 1.9.6

bug idatitime

Todos 5 comentários

A segunda postagem sobre a questão # 977 dá uma especialização de as.IDate.POSIXct que eu uso. Ele usará o fuso horário especificado pelo POSIXct. Ele também fará a conversão se você passar um argumento tz , mas observe que atualmente IDateTime não passa argumentos extras para as.IDate . Na prática, também redefino IDateTime para passar os ... argumentos para as.IDate e as.ITime .

Não está claro para mim quais são os padrões e metas em torno de IDateTime , então não tentei fazer um PR para isso, mas acho que vai resolver o seu problema.

Obrigado, e-mu-pi. Você identificou a causa do problema que estou enfrentando com IDateTime.

@MichaelChirico você acha que poderia dar uma olhada nisso? (já que você corrigiu alguns problemas / fez melhorias com IDate / ITime ..)

@arunsrinivasan claro, vou colocá-lo na minha lista de tarefas.

Postagem original um pouco confusa.

Exemplo mínimo:

as.POSIXct("2016/01/13 17:00", tz = "America/Los_Angeles")
# [1] "2016-01-13 17:00:00 PST"
IDateTime(as.POSIXct("2016/01/13 17:00", tz = "America/Los_Angeles"))
#         idate    itime
# 1: 2016-01-14 17:00:00
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

tcederquist picture tcederquist  ·  3Comentários

arunsrinivasan picture arunsrinivasan  ·  3Comentários

symbalex picture symbalex  ·  3Comentários

mattdowle picture mattdowle  ·  3Comentários

sengoku93 picture sengoku93  ·  3Comentários