如何将UTC时间戳转换为澳大利亚时间

时间:2014-02-03 05:29:25

标签: r timestamp

我有大量带有时间戳的数据,格式如下:2013-11-14T23:52:29Z。

我的研究表明时区是UTC(用" Z"后缀表示)。

我需要将其转换为+1100 UTC(澳大利亚/悉尼时间),也称为" EDT" (或东部夏令时)。

我尝试了以下内容:

test_timestamp <- "2013-11-14T23:52:29Z"
as.POSIXct(test_timestamp,"Australia/Sydney")

这会产生输出"2013-11-14 EST"

这不会通过完整性测试,因为它应该将日期推迟到下一个日历日(即美国东部时间2013-11-15)。

我在这个看似微不足道的任务上浪费了很多时间,所以非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

尝试此操作,并指定完整format(请参阅?strptime):

format(
  as.POSIXct(test_timestamp,format="%Y-%m-%dT%H:%M:%SZ",tz="UTC"),
  tz="Australia/Sydney"
)
#[1] "2013-11-15 10:52:29"

比较您的尝试(基本上):

format(as.POSIXct(test_timestamp,tz="Australia/Sydney"),tz="Australia/Sydney")
#[1] "2013-11-14"

此外,这将非破坏性地编辑数据,只改变输出:

result <- as.POSIXct(test_timestamp,format="%Y-%m-%dT%H:%M:%SZ",tz="UTC")
result
#[1] "2013-11-14 23:52:29 UTC"
#dput(result)
#structure(1384473149, class = c("POSIXct","POSIXt"), tzone = "UTC")

attr(result,"tzone") <- "Australia/Sydney"
#dput(result)
#structure(1384473149, class = c("POSIXct","POSIXt"), tzone = "Australia/Sydney")
result
#[1] "2013-11-15 10:52:29 EST"