将数字日期转换为POSIXct R

5

我有一个日期,我将其转换为数值,然后想要再将其转换回日期。

将日期转换为数值:

date1 = as.POSIXct('2017-12-30 15:00:00')
date1_num = as.numeric(date1)
# 1514646000

将数字重新转换为日期:

as.Date(date1_num, origin = '1/1/1970')
# "4146960-12-12"

我在重新转换中错过了什么?我期望最后一个命令会返回我的原始 date1
4个回答

4

由于数字向量是从具有时间组件的对象创建的,因此可以采用相同的方式进行重新转换,即首先将其转换为POSIXct,然后再使用as.Date进行包装。

as.Date(as.POSIXct(date1_num, origin = '1970-01-01'))
#[1] "2017-12-30"

非常好,那我该如何重构原始日期“date1”中的时间“15:00:00”? - ben_aaron
@ben_aaron 只需删除 as.Date 包装 as.POSIXct(date1_num, origin = '1970-01-01')# [1] "2017-12-30 15:00:00 EST" - akrun

3
你可以使用来自anytime包的anytime()anydate()
R> pt <- anytime("2017-12-30 15:00:00")
R> pt
[1] "2017-12-30 15:00:00 CST"
R>
R> anydate(pt)
[1] "2017-12-30"
R>
R> as.numeric(pt)
[1] 1514667600
R>
R> anydate(as.numeric(pt))
[1] "2017-12-30"
R> 

2

POSIXct 计算的是自 Unix 纪元以来的秒数,而 Date 计算的是天数。因此,您可以通过除以(60*60*24)(忽略闰秒)来恢复日期,或者将其转换回 POSIXct

as.Date(as.numeric(date1)/(60*60*24), origin="1970-01-01")
[1] "2017-12-30"

as.POSIXct(as.numeric(date1),origin="1970-01-01")
[1] "2017-12-30 15:00:00 GMT"

1
使用 lubridate
lubridate::as_datetime(1514646000)
[1] "2017-12-30 15:00:00 UTC"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接