如何在AEST时区获取日期和时间?

时间:2018-02-19 23:07:01

标签: r

我的总部设在澳大利亚墨尔本。

我试图在AEST时间而不是AEDT或UTC时区获取日期和时间。

我是否有办法在每次使用日期/时间功能或环境设置时指定所有日期/时间将基于澳大利亚东部标准时间而非UTC或澳大利亚东部夏令时。

我试图使用lubridate包甚至POSIXct / lt日期函数,但我无法在AEST时间给它提供日期/时间。

祝你好运

Deepak Agarwal

1 个答案:

答案 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;。