Мы можем использовать 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 - спецификация часового пояса, которая будет использоваться для преобразования, если оно требуется. Специфицируется системой c (см. Часовые пояса), но "" - это текущий часовой пояс, а "GMT" - это UT C (Всемирное время, скоординированное). Недопустимые значения чаще всего рассматриваются как UT C, на некоторых платформах с предупреждением.
as.POSIXlt(test2)$hour
#[1] 0
as.POSIXlt(test2, tz = "")$hour
#[1] 20
""
использует Sys.timezone
по умолчанию
as.POSIXlt(test2, tz = Sys.timezone())$hour
#[1] 20