gpt4 book ai didi

r - 如何从POSIXct和POSIXlt对象中提取正确的时区?

转载 作者:行者123 更新时间:2023-12-03 13:31:58 25 4
gpt4 key购买 nike

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 /谁知道我可以使用哪个时区?

“欧洲/伦敦”适用于POSIXlt,但不适用于POSIXct。另外,它不能使用base :: format从某个时间提取
as.POSIXctas.POSIXlt函数中,“ BST”未被识别为有效时区。

最佳答案

@Koshke已经显示了您


两种日期类型在内部表示形式上的差异,以及
在内部,两个时区规范都相同。


您可以使用attr()以标准化方式获取时区。这将以zone.tab文件中指定的格式获取时区,R可以使用该格式来定义时区(?timezones中的更多信息)。

例如:

> attr(time1,"tzone")
[1] "Europe/London"
> attr(time2,"tzone")
[1] "Europe/London"


尽管POSIXct对时区使用的指示与POSIXlt不同,而属性是相同的,但我感到非常惊讶。显然,此“ BST”仅在打印POSIXct时弹出。在打印之前,POSIXct再次转换为POSIXlt,并且tzone属性使用同义词进行了修改:

> attr(as.POSIXlt(time2),"tzone")
[1] "Europe/london" "GMT" "BST"


这发生在内部R函数 as.POSIXlt的下游,由于要解决的问题更加紧急,我暂时无法查看。但是请随意阅读它,看看那里到底发生了什么。

在一个旁注中,在我的Windows 7 / R 2.13.0安装中,“ BST”不被识别为时区(在zone.tab中也未提及)。

关于r - 如何从POSIXct和POSIXlt对象中提取正确的时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6071155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com