使用与1970年1月1日不同的原点从POSIXct中的时间戳获取秒数

时间:2017-04-13 21:12:08

标签: r

这可能看起来像一个重复的问题,但我找不到正确的答案。我正在处理R中的一些数据,我希望将时间戳(其中一个变量)存储为自1960年1月1日起经过的秒,而不是默认在1970年1月1日的R中。我这样做是因为我的目的是合并这个使用SAS数据集的数据集也具有时间戳列和SAS中的defalt是1960年1月1日。这是我想要实现的目标 -

x <- "2017/04/11 10:32"
x <- as.POSIXct(x, format="%Y/%m/%d %H:%M", origin="1960-01-01", tz="UTC")
x <- as.numeric(x)

这给了我x = 1491906720这是错误的,因为根据SAS它应该是1807525920。我尝试向后移动,如下所示,并得到了正确的结果。

x <- 1807525920
x <- as.POSIXct(x, origin="1960-01-01", tz="UTC")

给了我x =“2014-04-11 10:32:00”这是正确的。我不确定我错在哪里。这可能是一个非常愚蠢的事情,但任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

origin对于导入数字日期非常有用(通常由可能使用与R不同的其他程序生成)。这就解释了为什么你第二次得到预期的输出。由于您首先将字符串转换为POSIXct,origin在那里没有做任何事情。使用difftime获取x与您想要的任何其他日期之间的间隔。

x = "2017/04/11 10:32"
as.numeric(difftime(time1 = as.POSIXct(x, tz = "UTC"),
                    time2 = as.POSIXct("1960-01-01", tz = "UTC"),
                    units = "secs"))
#[1] 1807525920