Data.table: 如果时间大于 15:59 (tz="America/Los_Angeles"),IDateTime 会报告错误的日期

创建于 2016-01-15  ·  5评论  ·  资料来源: Rdatatable/data.table

如果时间部分大于 15:59 (tz="America/Los_Angeles"),IDateTime() 会生成错误的日期
时间在我的时区 15:59 / 之后的所有记录的转换。

问题详情:
http://stackoverflow.com/questions/34786887/why-does-idatetime-convert-to-the-wrong-date

FiveMinute.csv 文件中的数据:
时间,高,低,开盘,收盘,成交量
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

R脚本:
图书馆(数据表)
csv1 = "五分钟.csv"
dt = fread(csv1)
dput(dt)

as.POSIXct 不会改变日期

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")))

系统:Win10x64 R 3.2.2 data.table 1.9.6

bug idatitime

所有5条评论

关于问题 #977 的第二篇文章给出了我使用的as.IDate.POSIXct的专业化。 它将使用 POSIXct 指定的时区。 如果您传入tz参数,它也会进行转换,但请注意,当前IDateTime不会将额外的参数传递给as.IDate 。 在实践中,我还重新定义了IDateTime以将...参数传递给as.IDateas.ITime

我不清楚IDateTime周围的标准和目标是什么,所以我没有尝试为此做 PR,但我认为它会解决您的问题。

谢谢你,e-mu-pi。 您已经确定了我遇到的 IDateTime 问题的原因。

@MichaelChirico你认为你可以看看这个吗? (因为您已经解决了一些问题/对 IDate / ITime 进行了改进......)

@arunsrinivasan当然,我会把它放在我的任务列表中。

原帖有点不清楚。

最小的例子:

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
此页面是否有帮助?
0 / 5 - 0 等级