这是我的例子。
test <- as.POSIXct(as.Date("2019-11-01"), tz = "UTC")
test
它打印:
[1] "2019-10-31 19:00:00 CDT"
它似乎忽略了tz
参数:
attr(test, "tzone")
返回NULL。
为什么会有“ 19”小时而不是00小时?我怎样才能将其设为00小时并花费UTC
?
更新 这是更好的情况:
test_2 <- as.POSIXct("2019-11-01 00:00:00", tz = "UTC")
str(test_2)
attr(test_2, "tzone")
strftime(test_2, "%H")
它生成:
POSIXct[1:1], format: "2019-11-01"
[1] "UTC"
[1] "19"
现在看起来好像没有忽略参数tz
,但是小时是19,但是为什么呢?
答案 0 :(得分:1)
我们可以使用with_tz
中的lubridate
library(lubridate)
test1 <- with_tz(as.Date("2019-11-01"), tzone = 'UTC')
attr(test1, 'tzone')
#[1] "UTC"
此外,as.POSIXct
可以直接应用
test2 <- as.POSIXct("2019-11-01", tz = "UTC")
test2
#[1] "2019-11-01 UTC"
attr(test2, 'tzone')
#[1] "UTC"
通过strftime
,将选项用于tz
strftime(test2, "%H", tz = 'UTC')
#[1] "00"
如果我们检查strftime
,它将使用as.POSIXlt
进行第二次转换,然后使用format
获得格式化的输出
strftime
function (x, format = "", tz = "", usetz = FALSE, ...)
format(as.POSIXlt(x, tz = tz), format = format, usetz = usetz,
...)
根据?as.POSIXlt
tz-转换所使用的时区规范(如果需要)。特定于系统(请参阅时区),但是“”是当前时区,“ GMT”是UTC(世界标准时间,协调时间)。在某些带有警告的平台上,无效值通常被视为UTC。
as.POSIXlt(test2)$hour
#[1] 0
as.POSIXlt(test2, tz = "")$hour
#[1] 20
""
默认使用Sys.timezone
as.POSIXlt(test2, tz = Sys.timezone())$hour
#[1] 20