Existe-t-il un moyen portable de transformer le fuseau horaire du système local en un type icaltical libical?

libical semble n’accepter que le nom de la ville Olsen pour rechercher des fuseaux horaires dans sa firebase database. Ce qui est portable est un struct tm qui a un offset GMT et le code abrégé de 3-4 lettres (EST / EDT, etc.) mais aucune fonction n’accepte cela dans libical.

J’ai une façon vraiment moche d’parsingr la liste de tz de libical en essayant de faire correspondre les noms de tz, et cela fonctionnera probablement, mais je suis bien conscient que c’est une mauvaise idée. Mais je n’ai pas trouvé d’autre moyen de convertir le fuseau horaire local en un type icaltical libical.

Est-ce que je manque quelque chose de simple?

Et par portable, je veux dire Windows, OSX et Linux.

Ceci est un programme que j’écris. Mais je vois maintenant que tz offset n’est pas posix, alors ça ne va pas.

Donc, je pense que la réponse est qu’il n’y a pas de réponse. Rien de portable en tout cas.

J’ai donc des chemins de construction séparés pour Linux et osx, et je n’ai pas encore atteint Windows.

L’implémentation Linux lit simplement dans / etc / timezone (plus de détails sur Comment trouver le fuseau horaire actuel du système? )

et l’implémentation osx le fait.

 CFTimeZoneRef tzlocal = CFTimeZoneCopyDefault(); CFSsortingngRef me = CFTimeZoneGetName(tzlocal); NSSsortingng *local = (__bridge NSSsortingng *)me; const char *tzname = [local cSsortingngUsingEncoding:NSUTF8SsortingngEncoding]; log.debug("Looking up timezone for %s", tzname); // this is a built-in timezone so we don't have to free it. local_timezone = icaltimezone_get_builtin_timezone(tzname); 

Pas portable mais au moins c’est correct.