as.POSIXct,忽略时区部分
as.POSIXct, timezone part is ignored
这是我的例子。
test <- as.POSIXct(as.Date("2019-11-01"), tz = "UTC")
test
它打印:
[1] "2019-10-31 19:00:00 CDT"
好像忽略了tz
参数:
attr(test, "tzone")
returns 空。
为什么是“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,但是为什么?
我们可以使用 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 - time zone specification to be used for the conversion, if one is required. System-specific (see time zones), but "" is the current time zone, and "GMT" is UTC (Universal Time, Coordinated). Invalid values are most commonly treated as UTC, on some platforms with a warning.
as.POSIXlt(test2)$hour
#[1] 0
as.POSIXlt(test2, tz = "")$hour
#[1] 20
""
默认使用Sys.timezone
as.POSIXlt(test2, tz = Sys.timezone())$hour
#[1] 20
这是我的例子。
test <- as.POSIXct(as.Date("2019-11-01"), tz = "UTC")
test
它打印:
[1] "2019-10-31 19:00:00 CDT"
好像忽略了tz
参数:
attr(test, "tzone")
returns 空。
为什么是“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,但是为什么?
我们可以使用 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 - time zone specification to be used for the conversion, if one is required. System-specific (see time zones), but "" is the current time zone, and "GMT" is UTC (Universal Time, Coordinated). Invalid values are most commonly treated as UTC, on some platforms with a warning.
as.POSIXlt(test2)$hour
#[1] 0
as.POSIXlt(test2, tz = "")$hour
#[1] 20
""
默认使用Sys.timezone
as.POSIXlt(test2, tz = Sys.timezone())$hour
#[1] 20