我有大量带有时间戳的数据,格式如下: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)。
我在这个看似微不足道的任务上浪费了很多时间,所以非常感谢任何帮助。
答案 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"