Je lisons un fichier contenant des horodatages et une spécification de fuseau horaire. J'aimerais pouvoir détecter si un fuseau horaire donné sur ce fichier est reconnu par R ou non, et fournissez ma propre valeur par défaut au cas où ce n'est pas le cas.
Cependant, il semble que tel que.posixcct revient silencieusement à l'UTC si un fuseau horaire non valide, sans erreur ni avertissement, je pouvais attraper et gérer: P>
> as.POSIXct("1970-01-01", tz="blah")
[1] "1970-01-01 UTC"
4 Réponses :
Vous pouvez utiliser une bibliothèque de fuseau horaire qui a une connaissance des fuseaux horaires. Cela provient de la version SVN de RCPPBDT:
R> tz <- new(bdtTz, "America/Chicago")
R> cat("tz object initialized as: ", format(tz), "\n")
tz object initialized as: America/Chicago
R> tzBAD <- new(bdtTz, "blah")
Error in new_CppObject_xp(fields$.module, fields$.pointer, ...) :
Unknown region supplied, no tz object created
R>
Vous pouvez également utiliser le package rmetrics code> package code> Timedate code> pour vérifier le fuseau horaire. require(timeDate)
timeDate("1970-01-01", zone = "Africa/Dakar")
## [1] [1970-01-01]
timeDate("1970-01-01", zone = "blah")
## Error in .formatFinCenterNum(unclass(ct), zone, type = "any2gmt") :
## 'blah' is not a valid FinCenter.
Je pense que cela utilise juste horaire :: listfincenter () code> qui peut ne pas être à jour car il est juste un vecteur stocké dans l'emballage.
Peut-être que nous n'avons aucune preuve qui n'est pas mise à jour. Par conséquent, pourquoi un fichier ASCII dans un système UNIX avec TimeZone sera plus fiable.
a) parce que la distribution peut le mettre à jour. b) Réponse Valable uniquement de sous-ensemble de machines à exécuter une telle configuration, laissant d'autres systèmes Linux, Windows, OS X, ... En résumé, c'est pourquoi R transfère également sa copie de la DB d'Olson dans ses sources ...
@dickoa actuellement listfincenter () code> a 397 TimeZones et Exemple ("Zones horaires") Code> a 415 (au moins sur mon disto)
@Gsee Care pour ajouter l'exemple comme une réponse?
@Gsee je vois que tu as raison. J'ai vérifié et dans ma distribution (arc) j'ai 418. Merci
Les résultats vont varier en fonction de votre système d'exploitation, mais Aide ("Zones de temps") CODE> explique beaucoup de problèmes avec les fuseaux horaires en détail et vaut la peine de lire. Exemple ("Zones de temps") CODE> montre comment vous pouvez lire un fichier ZONE.TAB si votre système d'exploitation en a une. p>
Les utilisateurs Windows peuvent trouver Zone.tab à R_Home / Share / ZoneInfo / ZONE.TAB
vient de tomber sur cette question depuis que je cherchais à comprendre la même chose. S'est avéré en utilisant ce qui suit. Laissant ceci pour quiconque pourrait trébucher sur cette question ...
Merci Denis! Je pense que c'est la meilleure réponse pour la plupart des utilisateurs, comme cela peut être fait dans Baser sans bibliothèques externes ni appels aux ressources OS.
Comme
? Tel.posixcct code> dit, voir? "Zones horaires" code>... en particulier
exemple ('Zones de temps') code>.