gpt4 book ai didi

r - as.POSIXct 给出了一个意想不到的时区

转载 作者:行者123 更新时间:2023-12-04 00:48:15 24 4
gpt4 key购买 nike

我正在尝试转换 yearmon日期(来自 zoo 包)到 UTC 时区中的 POSIXct。
这就是我试图做的:

> as.POSIXct(as.yearmon("2010-01-01"), tz="UTC")
[1] "2010-01-01 01:00:00 CET"

转换日期时我得到相同的结果:
> as.POSIXct(as.Date("2010-01-01"),tz="UTC")
[1] "2010-01-01 01:00:00 CET"

让它工作的唯一方法是传递一个字符作为参数:
> as.POSIXct("2010-01-01", tz="UTC")
[1] "2010-01-01 UTC"

我查看了 DateTimeClasses 的文档, tzsettimezones .我的/etc/localtime 设置为 Europe/Amsterdam。除了设置 TZ 环境变量之外,我找不到将 tz 设置为 UTC 的方法:
> Sys.setenv(TZ="UTC")
> as.POSIXct(as.Date("2010-01-01"),tz="UTC")
[1] "2010-01-01 UTC"

从 yearmon 或 Date 创建 POSIXct 时,是否可以直接设置时区?

编辑:

我检查了函数 as.POSIXct.yearmon。这个传递给 as.POSIXct.Date。
> zoo:::as.POSIXct.yearmon
function (x, tz = "", ...)
as.POSIXct(as.Date(x), tz = tz, ...)
<environment: namespace:zoo>

所以就像约书亚说的那样,时区在 as.POSIXct.Date 中丢失了。现在,我将使用 Richies 建议手动设置 tzone:

attr(x, "tzone") <- 'UTC'

这解决了丢失 tzone 的问题,它仅用于演示,而不是像 Grothendieck 和 Dwin 建议的那样在内部使用。

最佳答案

这是因为 as.POSIXct.Date不通过 ....POSIXct .

> as.POSIXct.Date
function (x, ...)
.POSIXct(unclass(x) * 86400)
<environment: namespace:base>

关于r - as.POSIXct 给出了一个意想不到的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6548601/

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