我的总部设在澳大利亚墨尔本。
我试图在AEST时间而不是AEDT或UTC时区获取日期和时间。
我是否有办法在每次使用日期/时间功能或环境设置时指定所有日期/时间将基于澳大利亚东部标准时间而非UTC或澳大利亚东部夏令时。
我试图使用lubridate包甚至POSIXct / lt日期函数,但我无法在AEST时间给它提供日期/时间。
祝你好运
Deepak Agarwal
答案 0 :(得分:6)
第一个问题可能是假设" AEST"找到了。事实并非如此。
now <- Sys.time()
now
# [1] "2018-02-19 23:37:28 UTC"
attr(now, "tzone") <- "AEST"
now
# Warning in as.POSIXlt.POSIXct(x, tz) : unknown timezone 'AEST'
# [1] "2018-02-19 23:37:28 GMT"
您可能想知道时区可用的内容。阅读?timezones
可能会有所帮助,其中显示了两个相关的功能:
Sys.timezone(location = TRUE)
OlsonNames()
如果您查看OlsonNames()
(它有点长,顺便说一句),您会注意到:
on <- OlsonNames()
length(on)
# [1] 593
on[ grepl("Australia", on) ]
# [1] "Australia/ACT" "Australia/Adelaide" "Australia/Brisbane"
# [4] "Australia/Broken_Hill" "Australia/Canberra" "Australia/Currie"
# [7] "Australia/Darwin" "Australia/Eucla" "Australia/Hobart"
# [10] "Australia/LHI" "Australia/Lindeman" "Australia/Lord_Howe"
# [13] "Australia/Melbourne" "Australia/North" "Australia/NSW"
# [16] "Australia/Perth" "Australia/Queensland" "Australia/South"
# [19] "Australia/Sydney" "Australia/Tasmania" "Australia/Victoria"
# [22] "Australia/West" "Australia/Yancowinna"
如果我更正,那么您就可以使用"Australia/Queensland"
了。现在,你可以做到
attr(now, 'tzone') <- "Australia/Queensland"
now
# [1] "2018-02-20 09:37:28 AEST"
许多处理时间戳的函数都会接受tz=
或相关参数。他们中的许多人(我不知道&#34;所有&#34;是否正确,所以我会坚持&#34;很多&#34;)尊重"TZ"
环境变量:
Sys.getenv("TZ")
# [1] ""
Sys.time()
# [1] "2018-02-19 23:43:11 UTC"
Sys.setenv(TZ = "Australia/Queensland")
Sys.time()
# [1] "2018-02-20 09:43:11 AEST"
(您也可以将"Etc/GMT+10"
用于代码高尔夫或其他原因,这适用于小时对齐的时区。但是,查看OlsonNames()
的回复,您将无法获得half-hour-aligned timezones present in Australia。)
修改:糟糕,应该"Etc/GMT-10"
作为选项,而不是#34; + 10&#34;。