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 (dt $ Time)
as.POSIXct (dt $ Time, "% Y /% m /% d% H:% M", tz = "")
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
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