将纪元转换为日期并回到纪元

时间:2015-09-01 09:18:37

标签: r datetime

此前也有人对此有过疑问 herehereherehere

使用所有这些信息,下面应该有效,但似乎有一些翻译损失。

a <- c(1433097000, 1433183400, 1433269800, 1433356200, 1433442600, 1433529000)
a
# [1] 1433097000 1433183400 1433269800 1433356200 1433442600 1433529000
b <- as.Date(as.POSIXct(a, origin='1970-01-01', tz='Asia/Kolkata'))
b <- as.numeric(as.POSIXct(b, tz='Asia/Kolkata', format="%Y-%m-%d", origin='1970-01-01'))
b
# [1] 1433030400 1433116800 1433203200 1433289600 1433376000 1433462400

==== 编辑:

tz ='Asia / Kolkata',a的时间将为00:00:00

strftime(as.POSIXct(a, origin='1970-01-01', tz='Asia/Kolkata'), format="%Y-%m-%d %H:%M:%S")
[1] "2015-06-01 00:00:00" "2015-06-02 00:00:00" "2015-06-03 00:00:00" "2015-06-04 00:00:00" "2015-06-05 00:00:00"
[6] "2015-06-06 00:00:00"

1 个答案:

答案 0 :(得分:2)

我无法完全按照&#39; IST&#39;是我机器上的未知时区。 (R 3.2.0)

这个答案只是在开发@Pascal评论,因为你似乎没有得到它。

但是使用a并使用GMT,我们会在18:30收到日期和时间:

> as.POSIXct(a, tz='GMT', origin='1970-01-01')
[1] "2015-05-31 18:30:00 GMT" "2015-06-01 18:30:00 GMT" "2015-06-02 18:30:00 GMT" "2015-06-03 18:30:00 GMT"
[5] "2015-06-04 18:30:00 GMT" "2015-06-05 18:30:00 GMT"

接下来你只取日期,然后重新转换为日期时间(抱歉我没有摆脱我的timzeone CEST):

> as.POSIXct(b, tz='GMT', format="%Y-%m-%d", origin='1970-01-01')
[1] "2015-05-31 02:00:00 CEST" "2015-06-01 02:00:00 CEST" "2015-06-02 02:00:00 CEST"
[4] "2015-06-03 02:00:00 CEST" "2015-06-04 02:00:00 CEST" "2015-06-05 02:00:00 CEST"

当仅向as.POSIXct()提供日期时,该功能假定它在当天00:00:00。

这就是为什么会有损失,你剥夺了时间信息,所以你得到了起始和终止对象之间的差异。

根据亚洲/加尔各答&#39;的具体情况进行更新问题:

> b
[1] "2015-05-31" "2015-06-01" "2015-06-02" "2015-06-03" "2015-06-04" "2015-06-05"

as.POSIXct在给定Date对象时忽略tz参数(没有挖掘原因)所以解决方法是将as.POSIXlt的调用包装起来,这将使用原始时区UTC生成正确的对象午夜时分:

as.POSIXlt(b)
[1] "2015-05-31 UTC" "2015-06-01 UTC" "2015-06-02 UTC" "2015-06-03 UTC" "2015-06-04 UTC" "2015-06-05 UTC"

用as.POSIXct包含它给出的时区:

> as.POSIXct(as.POSIXlt(b),tz='Asia/Kolkata')
[1] "2015-05-31 IST" "2015-06-01 IST" "2015-06-02 IST" "2015-06-03 IST" "2015-06-04 IST" "2015-06-05 IST"

但它只是改变了对象的时区,它没有改变时间。

我感觉我们处理的是XY问题,这种转换是其他内容的一部分(在某些时候播放日期),应该用POSIXct处理另一种方式像difftime或其他......

这样的函数