在lubridate中,有没有办法将ymd_hms()日期格式转换为数字然后返回?

时间:2014-09-26 22:05:35

标签: r data.table

目前,我将日期数据存储在大型data.table表的列中。日期数据类似于:

dt1 <- data.table(Person = seq(6), Date = ymd_hms(c("2007-1-1 12:31:25 PST", "2007-1-3 09:31:25 PST", "2007-1-9 15:31:22 PST", "2007-1-17 21:41:23 PST", "2007-1-30 02:04:22 PST", "2007-2-2 02:07:12 PST")))

> dt1
Person                Date
1:      1 2007-01-01 12:31:25
2:      2 2007-01-03 09:31:25
3:      3 2007-01-09 15:31:22
4:      4 2007-01-17 21:41:23
5:      5 2007-01-30 02:04:22
6:      6 2007-02-02 02:07:12

ymd_hms()是包lubridate中的一个函数。现在,当我将日期转换为数字时,我得到:

dt1[,Date:=as.numeric(Date)]

> dt1
Person       Date
1:      1 1167654685
2:      2 1167816685
3:      3 1168356682
4:      4 1169070083
5:      5 1170122662
6:      6 1170382032

在此之后,我尝试了各种方法,但无法将日期转换回原始格式。谁会知道一个简单的功能?谢谢!

1 个答案:

答案 0 :(得分:2)

我浏览了?lubridate,但我没有看到任何提及将数字转换为POSIXct的支持。

所以,我认为你&#34;有&#34;用基础R做。

Date = ymd_hms(c("2007-1-1 12:31:25 PST", "2007-1-3 09:31:25 PST", 
                 "2007-1-9 15:31:22 PST", "2007-1-17 21:41:23 PST", 
                 "2007-1-30 02:04:22 PST", "2007-2-2 02:07:12 PST"))
as.numeric(Date)
#[1] 1167654685 1167816685 1168356682 1169070083 1170122662 1170382032
as.POSIXct(as.numeric(Date), origin="1970-01-01", tz="UTC")
#[1] "2007-01-01 12:31:25 UTC" "2007-01-03 09:31:25 UTC"
#[3] "2007-01-09 15:31:22 UTC" "2007-01-17 21:41:23 UTC"
#[5] "2007-01-30 02:04:22 UTC" "2007-02-02 02:07:12 UTC"

作为旁注,您的时间是在UTC中创建的,而不是&#34; PST&#34;。如果这不是您想要的,也许您打算在tz=America/Los_Angeles电话中加入ymd_hms()

Date <- ymd_hms(c("2007-1-1 12:31:25 PST", "2007-1-3 09:31:25 PST", 
                  "2007-1-9 15:31:22 PST", "2007-1-17 21:41:23 PST", 
                  "2007-1-30 02:04:22 PST", "2007-2-2 02:07:12 PST"),
                tz="America/Los_Angeles")

#Sys.setenv(TZ="America/Los_Angeles") 
as.POSIXct(as.numeric(Date), origin="1970-01-01")
#[1] "2007-01-01 12:31:25 PST" "2007-01-03 09:31:25 PST"
#[3] "2007-01-09 15:31:22 PST" "2007-01-17 21:41:23 PST"
#[5] "2007-01-30 02:04:22 PST" "2007-02-02 02:07:12 PST"