在R中格式化DateTime对象的Timezone部分

时间:2017-07-11 13:07:20

标签: r datetime datetime-format timezone-offset

有没有办法提取时区或格式化datetime对象的时区部分,例如" + 530"而不是" IST"或"亚洲/加尔各答"?

(需要这个,因为它是javascript中使用的ISO 8601格式)

示例:

as.POSIXct(1499773898,tz="Asia/Kolkata",origin="1970-01-01")
[1] "2017-07-11 17:21:38 IST"

相反,我想在as.POSIXct中指定format参数,以便输出看起来像这样:

[1] "2017-07-11 17:21:38 +530"

或者能够以这种方式拉出时区偏移的函数:

timezone_offset("2017-07-11 17:21:38 IST")
[1] "+530"

lubridate或任何其他软件包是否有能力执行此操作?

1 个答案:

答案 0 :(得分:0)

您可以同时使用format,但请注意结果是字符串,不再是POSIXct对象。

x <- as.POSIXct(1499773898,tz="Asia/Kolkata",origin="1970-01-01")

“2017-07-11 17:21:38 IST”

例如,在ISO 8601中显示时间戳:

format(x, "%Y-%m-%dT%H:%M:%S%z")

“2017-07-11T17:21:38 + 0530”

例如,显示刚刚从UTC偏移:

format(x, "%z")

“+ 0530”

请注意,对于R中的操作,这几乎没有什么后果,因为所有POSIXct对象都在内部存储为UTC中的数字;从1970-01-01 00:00:00开始的秒数。

要将ISO 8601中的POSIXct时间戳写入文件,您可以使用上述formatfwrite data.table函数,默认情况下会这样做(请参阅dateTimeAs参数)。