select current_timestamp(),to_utc_timestamp(current_timestamp(),'PHT'); | 2019-07-10 07:52:29.795 | 2019-07-10 07:52:29.795 |
3 Réponses :
Vous devez spécifier le continent / la capitale du pays:
select to_utc_timestamp(current_timestamp(),'Asia/Manila');
@leftjoin, étrange .. dans Hive 1.1.0-cdh5.14.2 fonctionne bien (testé avant commenté). Il montre notre temps - 8h. J'ai donné cette solution parce que dans notre environnement Datalake Production, nous utilisons ce type de transformation et cela fonctionne très bien. Bon à savoir que dans une version supérieure n'est plus supporté; peut-être devons-nous le changer. Merci!
sélectionnez current_timestamp (), to_utc_timestamp (current_timestamp (), 'As ia / Manilla'); OK 2019-07-11 22: 57: 54.011 2019-07-11 22: 57: 54.011
Finalement vérifié une fois de plus et trouvé que c'était un bogue. C'est Manille, pas Manille. Ça fonctionne bien!
Le fuseau horaire
'PHT'
n'est pas reconnu car java.time.ZoneId ne contient pas une telle zone, il contient cependant IST
. Utilisez la notation de décalage GMT comme ceci:
select current_timestamp(),to_utc_timestamp(current_timestamp(),'Asia/Manila'); OK 2019-07-11 23:09:47.257 2019-07-11 15:09:47.257 Time taken: 4.029 seconds, Fetched: 1 row(s)
Je ne suis pas tout à fait sûr que ce soit GMT + 8: 00
aux Philippines ou devrait-il être GMT-8: 00
, vous devriez savoir mieux, to_utc_timestamp ()
fonctionnera correctement si vous spécifiez le décalage GMT correct. Et il n'y a pas d'heure d'été à Manille, donc cette méthode devrait fonctionner correctement.
L'Asie / Manille fonctionne également bien et comme @ F.Lazarescu l'a mentionné, il est préférable d'utiliser l'identifiant du fuseau horaire au lieu du décalage GMT car l'heure d'été sera compté le cas échéant:
hive> select current_timestamp(),to_utc_timestamp(current_timestamp(),'GMT+8:00'); OK 2019-07-10 23:21:24.743 2019-07-10 15:21:24.743 Time taken: 0.096 seconds, Fetched: 1 row(s)
Jetez également un œil à cet article plutôt utile: Attention aux fuseaux horaires avec Sqoop, Hive, Impala et Spark
si vous regardez dans le lien que vous avez posté (Attention aux fuseaux horaires ..) vous verrez que dans l'un des exemples, il a utilisé de la même manière le paramètre utc de la fonction to_utc_timestamp que je l'ai fait dans mon exemple: extrait du site Web: < code> from_utc_timestamp (begin_effective_dt_tm, 'America / Ne w_York') AS local_time
J'ai également trouvé ceci sur le même site Web: Utilisez toujours les identifiants de fuseau horaire pour la région comme America / New_York ou America / Denver, pas comme EST ou CST. C'est une erreur courante car ce dernier ne tiendrait pas compte de l'heure d'été! Il y a une belle liste ici. Les identificateurs de fuseau horaire appropriés sont composés du nom d'un continent ou d'un océan et du nom d'un emplacement représentatif dans cette zone (généralement le nom de la plus grande ville).
N'utilisez pas d'abréviations de fuseau horaire comme identifiants. IST
peut être heure standard de l'Inde
, heure standard d'Israël
ou heure standard de l'Irlande
. (Il y a beaucoup d'autres ambiguïtés.)
IST
vous vouliez dire l'Inde, utilisez 'Asia/Kolkata'
IST
vous vouliez dire Israël, alors utilisez 'Asia/Jerusalem'
IST
vous vouliez dire Irelant, utilisez 'Europe/Dublin'
PHT
, utilisez «Asia / Manila»
pour les Philippines Consultez la liste des fuseaux horaires de la base de données tz sur Wikipédia pour la liste complète. p>