R 与.POSIXct一样,时区部分被忽略

R 与.POSIXct一样,时区部分被忽略,r,posixct,R,Posixct,这是我的例子 test <- as.POSIXct(as.Date("2019-11-01"), tz = "UTC") test 它看起来好像被忽略了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

这是我的例子

test <- as.POSIXct(as.Date("2019-11-01"), tz = "UTC")
test
它看起来好像被忽略了
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")

现在看来参数
tz
没有被忽略,但小时是19,但为什么呢?

我们可以使用
中的
润滑

library(lubridate)
test1 <- with_tz(as.Date("2019-11-01"), tzone = 'UTC')
attr(test1, '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,在某些平台上会出现警告

默认情况下,
使用
Sys.timezone

as.POSIXlt(test2, tz = Sys.timezone())$hour
#[1] 20

@user1700890我得到
hour(test2)#[1]0
@user1700890对我来说,它返回20。根据文档,当我们不提供
tz
时,它使用
,然后使用您的当前时区system@user1700890您可以使用
as.POSIXlt(test2,tz=Sys.timezone())$hour
@user1700890进行检查。我将使用lubridate`中的
hour
,或者您可以直接使用
格式(test2,“%H”进行检查)
@user1700890如果
unclass(test2)
将从
POSIXlt
strftime(test2, "%H", tz = 'UTC')
#[1] "00"
strftime
function (x, format = "", tz = "", usetz = FALSE, ...) 
format(as.POSIXlt(x, tz = tz), format = format, usetz = usetz, 
    ...)
as.POSIXlt(test2)$hour
#[1] 0
as.POSIXlt(test2, tz = "")$hour
#[1] 20
as.POSIXlt(test2, tz = Sys.timezone())$hour
#[1] 20