【发布时间】:2011-05-20 11:17:28
【问题描述】:
time1 = as.POSIXlt("2010-07-01 16:00:00", tz="Europe/London")
time1
# [1] "2010-07-01 16:00:00 Europe/London"
但是
time2 = as.POSIXct("2010-07-01 16:00:00", tz="Europe/London")
time2
# [1] "2010-07-01 16:00:00 BST"
为什么时区的显示方式不同?这对我很重要,因为我需要从我的日期中提取时区。
base::format(time1, format="%Z")
# [1] "BST"
base::format(time2, format="%Z")
# [1] "BST"
两者都为英国节省时间提供相同的“BST”!
问题是“BST”无法被 POSIXct/POSIXlt 格式识别:
as.POSIXlt("2010-07-01 16:00:00", tz="BST")
# [1] "2010-07-01 16:00:00 BST"
# Warning messages:
# 1: In strptime(xx, f <- "%Y-%m-%d %H:%M:%OS", tz = tz) :
# unknown timezone 'BST'
# 2: In structure(xx, class = c("POSIXct", "POSIXt"), tzone = tz) :
# unknown timezone 'BST'
# 3: In strptime(x, f, tz = tz) : unknown timezone 'BST'
as.POSIXct("2010-07-01 16:00:00", tz="BST")
# [1] "2010-07-01 16:00:00 GMT"
# Warning messages:
# 1: In strptime(xx, f <- "%Y-%m-%d %H:%M:%OS", tz = tz) :
# unknown timezone 'BST'
# 2: In structure(xx, class = c("POSIXct", "POSIXt"), tzone = tz) :
# unknown timezone 'BST'
# 3: In strptime(x, f, tz = tz) : unknown timezone 'BST'
# 4: In structure(xx, class = c("POSIXct", "POSIXt"), tzone = tz) :
# unknown timezone 'BST'
# 5: In as.POSIXlt.POSIXct(x, tz) : unknown timezone 'BST'
我真的很困惑。 我有两个问题:
1/POSIXct和POSIXlt格式有什么区别
2/ 有人知道我可以使用哪个时区吗?
"Europe/London" 适用于 POSIXlt 但不适用于 POSIXct。此外,无法使用 base::format 从时间中提取它
"BST" 在 as.POSIXct 或 as.POSIXlt 函数中未被识别为有效时区。
【问题讨论】:
-
这两个结果是来自两个不同的操作系统还是版本?
-
@Dirk Eddelbuettel:同一台计算机,相同版本的 R&packages。我在 Windows XP 上。 POSIXct 评估时区,根据季节将欧洲/伦敦替换为 GMT 或 BST
-
我设法用一个技巧从 time1 中提取了“欧洲/伦敦” base::format(time1, format=" ", usetz = TRUE) 但它没用它表明,一旦我将这个 POSIXlt 放入 xts 中,它就会转换回 POSIXct,然后我松开“欧洲/伦敦”
-
认为警告是 Windows 问题...
as.POSIXlt("2010-07-01 16:00:00", tz="BST")在 OS X 上运行良好 -
@tim_yates:感谢您提供的信息