日期、时区和POSIXct

3

我刚刚读取了一个大型数据文件,其中“日期”列以字符形式存储,如O5JAN2004,06JAN2004。此数据文件中的时间与纽约时间匹配,而我居住在洛杉矶。

然后我使用as.Date将字符转换为日期。

t <- as.Date(key$DATE[1], format = "%d%b%Y")
[1] "2004-01-05"

但是当我使用as.POSIXct(t)时,它返回给我:
 > as.POSIXct(t)
[1] "2004-01-04 16:00:00 PST"
 > as.POSIXlt(t)
[1] "2004-01-05 UTC"

我尝试了网站上提到的几种方法,但结果并没有改变:

t <- as.Date(key$DATE[1], format = "%d%b%Y", 'PST')
t <- as.Date(key$DATE[1], format = "%d%b%Y", 'EST')
t <- as.Date(key$DATE[1], format = "%d%b%Y", tz="America/New_York")
t <- as.Date(keyi$DATE[1], format = "%d%b%Y", tz="America/Los_Angeles")
as.POSIXct(t, tz = "America/Los_Angeles")
as.POSIXct(t, tz = "America/New_York")

我想了解:当我使用as.POSIXct(t)时,我该如何使其返回"2004-01-05 PST"或其他任何时区。

我在思考,因为日期最初是以字符形式存储的,所以它不会记住它的原始时区,对吗?

我确实理解

as.Date(as.POSIXct(t))
> "2004-01-05"

但是为什么 as.POSIXct(t) 会返回之前的结果呢?因为我还有其他数据文件,使用 as.POSIXct(t) 也会得到 "2004-01-05 PST"。

谢谢!

1个回答

3

你的as.POSIXlt(t) 显示as.Date默认使用GMT。但是as.POSIXct默认使用本地时间,因此会进行不必要的转换。但是,你可以解决这个问题。

strptime有一个tz参数用于指定基准时区。这对我有用:

t = strptime(key$DATE[1], format = "%d%b%Y", tz= "America/Los_Angeles")
as.POSIXct(t)
[1] "2004-01-05 PST"

警告: tz 的值可行或不可行似乎相当奇怪。


谢谢!我会尝试的! - yuan yuan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接