2
votes

ruche convertir l'heure PHT en UTC

select current_timestamp(),to_utc_timestamp(current_timestamp(),'PHT');

| 2019-07-10 07:52:29.795  | 2019-07-10 07:52:29.795  |

0 commentaires

3 Réponses :


2
votes

Vous devez spécifier le continent / la capitale du pays:

select to_utc_timestamp(current_timestamp(),'Asia/Manila');


3 commentaires

@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!



0
votes

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


2 commentaires

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



0
votes

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

  • Si par IST vous vouliez dire l'Inde, utilisez 'Asia/Kolkata'
  • Si par IST vous vouliez dire Israël, alors utilisez 'Asia/Jerusalem'
  • Si par IST vous vouliez dire Irelant, utilisez 'Europe/Dublin'
  • Au lieu de 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.


0 commentaires