R nu mai acceptă fusurile orare în formatul GMT+n/GMT-n (Programare, R, Fus Orar, Decalaj De Fus Orar)

CCurtis a intrebat.

?timezones declară "Most platforms support time zones of the form GMT+n and GMT-n, which assume at a fixed offset from UTC (hence no DST)."

Am un cod vechi de la începutul acestui an în care folosesc tz="GMT-8". Singurele modificări aduse calculatorului meu au fost actualizarea la versiunea R "R version 3.2.2 (2015-08-14)" și migrarea bibliotecii mele de la un cont de utilizator vechi prin adăugarea unei linii de cod la profilul meu R aflat în "C:Program FilesRR-3.2.2librarybaseR". Doar pentru a fi detaliat codul a fost .libPaths(c("C:/Users/XXXX XXXX/Documents/R/win-library/3.2",.Library.site)). De ce s-ar putea ca sistemul meu să nu accepte brusc acest format tz? Ce setare de sistem pot schimba pentru a rezolva acest lucru?

Exemplu de lucru mai jos.

tdat<-c("11/19/2014 12:45", "11/19/2014 13:00", "11/19/2014 13:15", 
"11/19/2014 13:30", "11/19/2014 13:45", "11/19/2014 14:00", "11/19/2014 14:15", 
"11/19/2014 14:30", "11/19/2014 14:45", "11/19/2014 15:00")

as.POSIXct(strptime(tdat,"%m/%d/%Y %H:%M",tz="GMT-8"))

Warning messages:
1: In strptime(tdat, "%m/%d/%Y %H:%M", tz = "GMT-8") :
  unknown timezone 'GMT-8'
2: In as.POSIXct.POSIXlt(strptime(tdat, "%m/%d/%Y %H:%M", tz = "GMT-8")) :
  unknown timezone 'GMT-8'
3: In as.POSIXlt.POSIXct(x, tz) : unknown timezone 'GMT-8'

Comentarii

  • Sugerez eliminarea R conform notei din timezones: „Rețineți că, cu excepția cazului în care este înlocuită, operarea fusurilor orare este un serviciu al sistemului de operare și, chiar și atunci când este înlocuită, se utilizează o bază de date terță parte care poate fi actualizată (a se vedea secțiunea „Nume de fus orar”). Rezultatele incorecte nu vor fi niciodată o problemă a R, așa că vă rugăm să vă asigurați că aveți politețea de a nu da vina pe R pentru ele.” –  > Por Alexey Ferapontov.
  • IMHO tag-ul R este în regulă aici, deoarece faptul de a nu scrie întrebarea pe un ton acuzator sau de a nu se plânge la r-devel este probabil suficient pentru a adera la spiritul solicitării de a „evita să dai vina pe R”. –  > Por joran.
  • Încercați tz="Etc/GMT-8" –  > Por David Arenburg.
  • @AlexeyFerapontov , Da, nici o animozitate aici. R este un program fantastic! –  > Por CCurtis.
  • Fiți atenți. Etc/GMT-8 este de fapt GMT+8. Semnele sunt inversate. –  > Por Matt Johnson-Pint.
1 răspunsuri
Matt Johnson-Pint

În cazul în care platforma dvs. utilizează standardul tzdb fusele orare, atunci puteți într-adevăr să specificați zone fixe de ore întregi în formular: Etc/GMT+8.

Cu toate acestea, fiți atenți:

  • Semnul este inversat față de ceea ce probabil vă așteptați. Etc/GMT-8 este în China. Etc/GMT+8 este în America.

  • Există o mulțime de fusuri orare din lumea reală care utilizează decalaje de jumătate de oră sau 45 de minute, care nu pot fi reprezentate în această formă.

  • Acest lucru nu ține cont de ora de vară sau de alte modificări istorice ale fusurilor orare.

Prin urmare, este mai bine să se utilizeze numit zone orare, așa cum se găsește în aici.

De exemplu, pentru ora Pacificului din SUA, utilizați America/Los_Angeles, deoarece ține cont în mod corect de ora de vară, alternând între UTC-8 și UTC-7 .

Comentarii

  • Oh OK. Mulțumesc, observasem un comportament ciudat care se explica prin semnul inversat. Pur și simplu manipulez date din serii de timp și am nevoie de ele în PST, așa că această soluție funcționează. Am citit prin link-urile dvs. și am reușit să găsesc informații care explică utilizarea Etc/GMT-n. Deci, acest lucru are mai mult sens acum. Vă mulțumesc din nou. Noroc. –  > Por CCurtis.
  • Sigur. Amintiți-vă că PST este doar Pacific Standard Time. Dacă aveți nevoie să se potrivească cu ceea ce este utilizat de fapt de Pacific Time, atunci trebuie să luați în considerare și Pacific Daylight Time (PDT). UTC-8 nu este utilizat în timpul verii. –  > Por Matt Johnson-Pint.