2017-08-22 3 views
1

Je déboguais un problème d'affichage dans notre application Rails, qui prend une entrée du fuseau horaire de l'utilisateur et une heure planifiée et le formater comme une chaîne de temps de programmation lisible par l'utilisateur . Dans ce cas, le fuseau horaire de l'utilisateur est Ekaterinburg, et la partie bizarre est que l'abréviation de temps affichée est différente entre le serveur AWS avec Ubuntu 16.04 et mon Macbook avec Yosemite. Les versions de ruby ​​sont les mêmes (2.2.6p396) et les deux sont la même application Rails (avec les mêmes Gemfile et Gemfile.lock). Ceci est la ligne que j'utilise pour analyser le fuseau horaire et l'heure:Strftime affiche une abréviation différente pour un fuseau horaire dans différentes machines/serveurs

ActiveSupport::TimeZone.new("Ekaterinburg").parse("11:29 am").strftime("%l:%M%p %Z") 

Le temps formaté affiché dans le serveur est

« 11:29 +05 »

Alors que le heure formatée affichée dans ma machine locale est

"11h29 YEKT"

Toute aide est appréciée, merci d'avance.

+0

Votre machine locale est en retard sur les mises à jour de tzdata. Voir la réponse dup, avec [cet engagement] (https://github.com/eggert/tz/commit/1ac038c2c3f25f7211474ae08feb6afb820e35fe) et [cette annonce] (http://mm.icann.org/pipermail/tz-announce/2016 -September/000041.html) à partir du tzdb. –

+0

Merci! Tzdata est définitivement nouveau pour moi. – nayiaw

Répondre

1

Comme par the documentation on strftime:

%z - Fuseau horaire en heure et minute décalage par rapport à UTC (par exemple +0900)

%Z - nom ou des informations similaires de fuseau horaire abrégée. (Dépendant du système d'exploitation)

Si vous voulez que ce soit cohérent, utilisez %z.