【问题标题】:How to convert UTC timestamp to Australian time如何将UTC时间戳转换为澳大利亚时间
【发布时间】:2014-02-03 05:29:25
【问题描述】:

我有大量数据,时间戳格式如下: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 EST)。

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

【问题讨论】:

    标签: r timestamp


    【解决方案1】:

    试试这个,指定完整的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"
    

    【讨论】:

    • 问题:如果原来的时间是11-14的23:52:29 UTC,那么11-15的00:52:29怎么算,11小时后?
    • @jlhoward - 好点,我错过了原始 as.POSIXct(...) 通话中的 UTC - 现在已修复。
    • 啊,我刚回来问这个 - 谢谢你的提示。
    猜你喜欢
    • 2022-01-05
    • 2019-04-25
    • 2015-07-29
    • 1970-01-01
    • 2021-12-23
    • 2016-06-11
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多