2017-08-26 51 views
0

我刚刚发现一个大的数据文件,“DATE”列存储为O5JAN2004,06JAN2004这样的字符。该数据文件中的时间与纽约时间匹配,我住在洛杉矶。日期,时区和POSIXct

然后我使用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”或任何其他时区。

我在想,因为Date最初是作为字符存储的,所以它不会记得它原来的时区,对不对?

我得到

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

但是为什么as.POSIXct(T)返回一个结果?因为我也有其他数据文件,我会使用as.POSIXct(t)来获得“2004-01-05 PST”。

谢谢!

回答

1

您的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值不工作似乎是很奇怪。

+0

谢谢!我有一个尝试! –