6
votes

Vérifiez si un fuseau horaire est valide dans r

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"

r

2 commentaires

Comme ? Tel.posixcct dit, voir ? "Zones horaires"


... en particulier exemple ('Zones de temps') .


4 Réponses :


4
votes

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>  


0 commentaires

1
votes

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.


6 commentaires

Je pense que cela utilise juste horaire :: listfincenter () 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 () a 397 TimeZones et Exemple ("Zones horaires") 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



4
votes

Aide ("Zones de temps") explique beaucoup de problèmes avec les fuseaux horaires en détail et vaut la peine de lire.

Les résultats vont varier en fonction de votre système d'exploitation, mais Exemple ("Zones de temps") montre comment vous pouvez lire un fichier ZONE.TAB si votre système d'exploitation en a une. xxx


1 commentaires

Les utilisateurs Windows peuvent trouver Zone.tab à R_Home / Share / ZoneInfo / ZONE.TAB



4
votes

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 ... xxx


1 commentaires

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.