【问题标题】:Timezone for as.POSIXct not workingas.POSIXct 的时区不起作用
【发布时间】:2018-05-16 14:15:12
【问题描述】:

我有一个带日期的数据框,我正在尝试将其转换为 POSIXct 对象,但我无法指定时区。知道为什么会这样吗?

> str(dates)
'data.frame':   3171 obs. of  3 variables:
$ Date     : Date, format: "2013-05-14" "2013-08-15" "2014-05-30" "2014-09-29" ...
$ BB_Ticker: Factor w/ 1252 levels "A US Equity",..: 1 2 2 2 2 2 2 2 2 2 ...
$ 1Y       : POSIXct, format: "2013-05-13 20:00:00" "2013-08-14 20:00:00" "2014-05-29 20:00:00" "2014-09-28 20:00:00" ..

我尝试指定 "America/New_York""EST5EDT" 但没有效果 -

> head(as.POSIXct(dates$Date, tz = "GMT"), 3)
[1] "2013-05-13 20:00:00 EDT" "2013-08-14 20:00:00 EDT" "2014-05-29 20:00:00 EDT"

> head(as.POSIXct(dates$Date, tz = "America/New_York"), 3)
[1] "2013-05-13 20:00:00 EDT" "2013-08-14 20:00:00 EDT" "2014-05-29 20:00:00 EDT"

> head(as.POSIXct(dates$Date, tz = "EST5EDT"), 3)
[1] "2013-05-13 20:00:00 EDT" "2013-08-14 20:00:00 EDT" "2014-05-29 20:00:00 EDT"

【问题讨论】:

    标签: r date posixct


    【解决方案1】:

    如果您查看as.POSIXct.Date 的源代码,您会看到:

    function (x, ...) 
    .POSIXct(unclass(x) * 86400)
    <bytecode: 0x00000000120de6e0>
    <environment: namespace:base>
    

    注意没有时区是如何传递给.POSIXct的。

    你可以改用字符方法:

    as.POSIXct(as.character(as.Date("2013-05-14")), tz = "GMT")
    [1] "2013-05-14 GMT"
    

    【讨论】:

    • 并且@Roland 一直在提议(向 R-devel 邮件列表,正确地如此)来改善这种情况,我认为你是 +/- 正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多