2009-09-08 8 views

Odpowiedz

11

Najpierw przekonwertować czasu londyńskiego do POSIXct obiektu:

pb.txt <- "2009-06-03 19:30" 
pb.date <- as.POSIXct(pb.txt, tz="Europe/London") 

Następnie użyj format wydrukować datę w innej strefie czasowej:

> format(pb.date, tz="America/Los_Angeles",usetz=TRUE) 
[1] "2009-06-03 11:30:00 PDT" 

istnieją pewne sztuczki do znalezienia odpowiedniego czasu identyfikator strefy do użycia. Więcej szczegółów w tym poście na blogu Revolutions: Converting time zones in R: tips, tricks and pitfalls

+0

Format zamieni obiekt posix na znak. – obesechicken13

+0

Czy ta konwersja uwzględnia korekty oszczędności światła dziennego? –

+0

Tak, robi to odpowiedni przyrost/dekrement, jeśli lokalizacja znajduje się w bazie danych strefy czasowej. –

39

zmienić atrybut tzone od obiektu „POSIXct”:

> pb.txt <- "2009-06-03 19:30" 
> pb.date <- as.POSIXct(pb.txt, tz="Europe/London") 
> attributes(pb.date)$tzone <- "America/Los_Angeles" 
> pb.date 
[1] "2009-06-03 11:30:00 PDT" 

Należy pamiętać, że jest to nadal obiekt POSIXct, tzone uległa zmianie, i prawidłowe przesunięcie ma zastosowano:

> attributes(pb.date) 
$class 
[1] "POSIXct" "POSIXt" 

$tzone 
[1] "America/Los_Angeles" 
+0

Nie zapomnij sprawdzić linku zamieszczonego w komentarzach zaakceptowanej odpowiedzi (http://blog.revolution-computing.com/2009/06/converting-time-zones.html). Użyłem EST i pomyślałem, że ta odpowiedź nie działa! – kaoD

16

Pakiet lubridate posiada dwie funkcje do konwersji stref czasowych. Według stron pomocy:


force_tz zwraca Date-Time, który ma ten sam zegar jak x w nowej strefie czasowej.

force_tz(time, tzone = "America/Los_Angeles") 


with_tz zmienia strefę czasową, w której jest wyświetlany natychmiast. Wyświetlany jest czas zegarowy dla natychmiastowych zmian, ale opisany moment pozostaje taki sam.

+2

o wiele czystsze niż inne metody. –