从时间组件列表中创建POSIXlt

时间:2016-05-13 00:07:02

标签: r datetime

我将一些JSON数据读入R,并将日期时间信息存储为单独的时间组件(年,月,小时等)。鉴于我已经有了单独的部分,看起来应该很容易创建一个POSIXlt对象,因为后者只是一个时间组件列表。

as.POSIXlt不接受命名列表或组件向量。可以通过将适当的类和attr添加到列表来创建POSIXlt,但是如果没有wday和yday元素,它就会失败,这是我没有的。

我知道我可以将列表转换为字符串并对其进行解析,但这种解决方案非常优雅,我认为我确保没有更好的方法。

编辑:ISOdatetime正是我想要的。谢谢!

2 个答案:

答案 0 :(得分:1)

ISOdate是要使用的命令:

ISOdate(year, month, day, hour = 12, min = 0, sec = 0, tz = "GMT")

该函数返回POSIXct类型。有关详细信息,请参阅?ISOdate。

答案 1 :(得分:0)

ISOdate或ISOdatetime函数显然是可以使用的,但是因为你问过如何用POSIXlt作为起点,这里有点黑客攻击:

 test <- as.POSIXlt("1970-01-01")
 dput(test)
structure(list(sec = 0, min = 0L, hour = 0L, mday = 1L, mon = 0L, 
    year = 70L, wday = 4L, yday = 0L, isdst = 0L, zone = "PST", 
    gmtoff = NA_integer_), .Names = c("sec", "min", "hour", "mday", 
"mon", "year", "wday", "yday", "isdst", "zone", "gmtoff"), class = c("POSIXlt", 
"POSIXt"))
 test$year <- 1941
 test$mon <- 12
 test$mday <-7
 test
#[1] "3842-01-07 PST"   Wrong offset
 test$year <- 41
 test
#[1] "1942-01-07 PST"    "An infamous date"

我怀疑这是“错误的”。因为我怀疑一周中的某一天或其他列表项目得到适当的重新调整。