我有一个日期,我将其转换为数值,然后想要再将其转换回日期。
将日期转换为数值:
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
。由于数字向量是从具有时间组件的对象创建的,因此可以采用相同的方式进行重新转换,即首先将其转换为POSIXct
,然后再使用as.Date
进行包装。
as.Date(as.POSIXct(date1_num, origin = '1970-01-01'))
#[1] "2017-12-30"
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>
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"
lubridate::as_datetime(1514646000)
[1] "2017-12-30 15:00:00 UTC"
as.Date
包装as.POSIXct(date1_num, origin = '1970-01-01')# [1] "2017-12-30 15:00:00 EST"
- akrun