将数字日期重新转换为 POSIXct R
Reconvert numeric date to POSIXct R
我有一个日期,我将其转换为数值,然后想转换回日期。
将日期转换为数字:
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"
我在重新转换中遗漏了什么?我希望最后一个命令 return 我原来的 date1
.
由于数字向量是从具有时间分量的对象创建的,因此重新转换也可以采用相同的方式,即首先转换为 POSIXct
,然后用 as.Date
换行
as.Date(as.POSIXct(date1_num, origin = '1970-01-01'))
#[1] "2017-12-30"
您可以使用 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>
POSIXct
计算自 Unix Epoch 以来的秒数,而 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 :
lubridate::as_datetime(1514646000)
[1] "2017-12-30 15:00:00 UTC"
我有一个日期,我将其转换为数值,然后想转换回日期。
将日期转换为数字:
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"
我在重新转换中遗漏了什么?我希望最后一个命令 return 我原来的 date1
.
由于数字向量是从具有时间分量的对象创建的,因此重新转换也可以采用相同的方式,即首先转换为 POSIXct
,然后用 as.Date
as.Date(as.POSIXct(date1_num, origin = '1970-01-01'))
#[1] "2017-12-30"
您可以使用 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>
POSIXct
计算自 Unix Epoch 以来的秒数,而 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 :
lubridate::as_datetime(1514646000)
[1] "2017-12-30 15:00:00 UTC"