【问题标题】:why converting time zone not working with as.POSIXct... [R]为什么转换时区不适用于 as.POSIXct ... [R]
【发布时间】:2015-10-26 11:23:36
【问题描述】:

我读过this,它说 as.POSIXct 在内部始终是 UTC。难怪我得到了

> time1 = as.POSIXct('2015-10-25 10:15:13 UTC')
> time1
[1] "2015-10-25 10:15:13 EDT"
# missing tz causes coercion (not converting!) to computer's tz. 
# (I'm in EDT Boston and calculating some data in Dubai time)


> time1 = as.POSIXct('2015-10-25 10:15:13 UTC', tz = 'UTC', usetz = T)
> time1
[1] "2015-10-25 10:15:13 UTC"

# not work
> as.POSIXct(time1, tz = 'Asia/Dubai', usetz = T)
[1] "2015-10-25 10:15:13 UTC"

# works but the result is character
> format(time1, tz = 'Asia/Dubai', usetz = T)
[1] "2015-10-25 14:15:13 GST"
> class(format(time1, tz = 'Asia/Dubai', usetz = T))
[1] "character"

我可以使用format,但它会产生character,而且我不能用它来绘制与时间的关系。如何使用当地时间绘制?

【问题讨论】:

  • 嗨 @DavidArenburg 谢谢人 - 我看起来确实如此 - 请参阅 OP 中的更新
  • 你也可以as.POSIXct(format(time1, tz = 'Asia/Dubai', usetz = TRUE), tz = 'Asia/Dubai')
  • 哦,好的,谢谢!我可以在我的答案中添加它吗?
  • 很好,谢谢你是个好人! @DavidArenburg

标签: r timezone posixct


【解决方案1】:

尝试了一些东西,这很有效:

> library(lubridate)
> time1 = as.POSIXct('2015-10-25 10:15:13 UTC', tz = 'UTC', usetz = T)
> time1
[1] "2015-10-25 10:15:13 UTC"
> force_tz(time1 + 3600*4, tz = 'Asia/Dubai')
[1] "2015-10-25 14:15:13 GST"
> class(force_tz(time1 + 3600*4, tz = 'Asia/Dubai'))
[1] "POSIXct" "POSIXt" 

也可以使用稍长的语法使用 Rbase(感谢@David Arenburg)

> time1 = as.POSIXct('2015-10-25 10:15:13 UTC', tz = 'UTC', usetz = T)
> time1
[1] "2015-10-25 10:15:13 UTC"
> as.POSIXct(format(time1, tz = 'Asia/Dubai', usetz = T), tz = 'Asia/Dubai', usetz = T)
[1] "2015-10-25 14:15:13 GST"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    相关资源
    最近更新 更多