2011-11-04 35 views
7

Tôi có dữ liệu chuỗi thời gian thu được từ trình ghi dữ liệu được đặt thành một múi giờ không có tiết kiệm ánh sáng ban ngày (NZST hoặc UTC + 12: 00) và kéo dài dữ liệu một vài năm. Trình ghi dữ liệu không xem xét các thay đổi DST và được đồng bộ hóa với giờ địa phương có/không có DST (tùy thuộc vào người đã triển khai nó).Nhập ngày giờ tại múi giờ được chỉ định, bỏ qua thời gian tiết kiệm ánh sáng ban ngày

Tuy nhiên, khi tôi nhận dữ liệu vào R, tôi không thể sử dụng đúng cách as.POSIXct để bỏ qua DST. Tôi đang sử dụng R 2.14.0 trên một máy tính Windows với các thiết lập này:

> Sys.timezone() 
[1] "NZDT" 
> Sys.getlocale("LC_TIME") 
[1] "English_New Zealand.1252" 

Dưới đây là ba timestamps qua sự thay đổi mùa xuân DST, mỗi cách nhau 1 giờ ngoài:

> ts_str <- c("28/09/2008 01:00", "28/09/2008 02:00", "28/09/2008 03:00") 
> as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="") 
[1] "2008-09-28 01:00:00 NZST" NA 
[3] "2008-09-28 03:00:00 NZDT" 
> as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="UTC") 
[1] "2008-09-28 01:00:00 UTC" "2008-09-28 02:00:00 UTC" 
[3] "2008-09-28 03:00:00 UTC" 

Như bạn có thể xem, các đồng hồ nhảy về phía trước tại 1:59 đến 3:00, vì vậy 2:00 là không hợp lệ, do đó NA. Hơn nữa, tôi có thể sử dụng tz="UTC" để làm cho nó bỏ qua các thay đổi DST. Tuy nhiên, tôi muốn giữ đúng múi giờ vì tôi có chuỗi dữ liệu khác được ghi lại với DST (NZDT hoặc UTC + 13: 00) mà tôi muốn kết hợp (qua merge) để phân tích.

Làm cách nào để định cấu hình tham số tz trên máy tính MS Windows? Tôi đã thử nhiều thứ, chẳng hạn như "NZST", "Giờ chuẩn New Zealand", "UTC + 12: 00", "+1200", v.v., nhưng không có may mắn. Hoặc tôi có sửa đổi một số cài đặt khác không?

+2

Bạn có thể sử dụng 'tz =" Etc/GMT + 12 "' – James

+0

@James, tại sao bạn không trả lời? –

+0

@BenBolker Sẽ làm gì, chỉ cần thêm chỉnh trang phù hợp để vượt qua giới hạn ký tự – James

Trả lời

7

Bạn có thể sử dụng tz="Etc/GMT+12":

as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="Etc/GMT+12") 
[1] "2008-09-28 01:00:00 GMT+12" "2008-09-28 02:00:00 GMT+12" 
[3] "2008-09-28 03:00:00 GMT+12" 

Đối với một danh sách đầy đủ các múi giờ có sẵn sử dụng,

dir(file.path(R.home("share"),"zoneinfo"), recursive=TRUE) 

Có một vài file và.tab trong đó mà không phải là các múi giờ nhưng giữ một số thông tin, nhưng regex-fu của tôi không đủ tốt để có thể loại trừ chúng với đối số mẫu thành dir.

1

Nếu chỉ thêm 12 * 60 * 60 vào vectơ bắt nguồn từ UTC đó, bạn sẽ có thời gian "chuẩn" cục bộ.

+0

12 giờ? Bạn có nghĩa là 1 giờ? nghĩa là, 60 * 60 –

+0

Bạn muốn sử dụng UTC + 12 dù phải không? – James

+0

@Mike Toews. Tôi nghĩ rằng bạn đã được 12 giờ trước UTC –

Các vấn đề liên quan