Voir le String getDisplayName(boolean daylight,int style) méthode dans java.util.TimeZone. Le style peut être TimeZone.LONG ou TimeZone.SHORT avec le style court de retourner le nom court de la zone de temps.
Une plus longue haleine approche est de vérifier la sortie de String[] TimeZone.getAvailableIDs(int offset). Le temps court de la zone de codes peut être ambigu ou redondantes, alors peut-être que vous pourriez être plus approfondie à ce sujet:
TimeZone tz =TimeZone.getTimeZone("Europe/London");for(String s :TimeZone.getAvailableIDs(tz.getOffset(System.currentTimeMillis()))){System.out.print(s +",");}------------------------------------------------------Africa/Abidjan,Africa/Accra,Africa/Bamako,Africa/Banjul,Africa/Bissau,Africa/Casablanca,Africa/Conakry,Africa/Dakar,Africa/El_Aaiun,Africa/Freetown,Africa/Lome,Africa/Monrovia,Africa/Nouakchott,Africa/Ouagadougou,Africa/Sao_Tome,Africa/Timbuktu,America/Danmarkshavn,Atlantic/Canary,Atlantic/Faeroe,Atlantic/Faroe,Atlantic/Madeira,Atlantic/Reykjavik,Atlantic/St_Helena,Eire,Etc/GMT,Etc/GMT+0,Etc/GMT-0,Etc/GMT0,Etc/Greenwich,Etc/UCT,Etc/UTC,Etc/Universal,Etc/Zulu,Europe/Belfast,Europe/Dublin,Europe/Guernsey,Europe/Isle_of_Man,Europe/Jersey,Europe/Lisbon,Europe/London,GB,GB-Eire,GMT,GMT0,Greenwich,Iceland,Portugal,UCT,UTC,Universal,WET,Zulu,
cela renvoie "MESZ" pour "Europe/London" Curieux. Et lorsque l'entrée est MESZ le long de la sortie est Greenwich Mean Time Mitteleuropäische Sommerzeit.
Vous pouvez utiliser le code suivant pour trouver les 3 chiffres abréviation pour n'importe quel fuseau horaire.
Date date =newDate();StringTimeZoneIds[]=TimeZone.getAvailableIDs();String timezoneShortName ="";String timezoneLongName ="Europe/London";for(int i =0; i <TimeZoneIds.length; i++){TimeZone tz =TimeZone.getTimeZone(TimeZoneIds[i]);String tzName = tz.getDisplayName(tz.inDaylightTime(date),TimeZone.SHORT);if(timezoneLongName.equals(TimeZoneIds[i])){
timezoneShortName = tzName;break;}}System.out.println(timezoneShortName);
Le problème ici est que lorsque vous faites:Date date = new Date();, qui est l'application de l'horaire de n'importe quel appareil que vous êtes sur. ainsi, lorsque vous effectuez la tz.inDaylightTime(date) peu, c'est uniquement de déterminer si oui ou non votre appareil est en heure d'été et PAS de savoir si ou non ce moment sera l'heure d'été dans "Europe/London". Ainsi, si par exemple je lance ce code sur un PC à New York et avoir mon PC fuseau horaire défini pour l'EDT, ce code permettra de déterminer le statut de l'heure d'été à New York et non pas une "Europe/London"... Toute réflexion sur la façon de contourner!?! représente un point dans le temps (millisecondes écoulées depuis l'époque, à l'interne), donc ce n'est pas un problème. Pour le dire d'une autre façon, si je l'appelle new Date() à Boston et mon ami appelle new Date() à Londres au même instant, notre Date objets ont le même sous-jacent d'horodatage. Bien sûr, mais ce n'est pas le problème, je suis en train de résoudre. Mon problème est que la Date est stockée sur le serveur (UTC), mais quand cette même date est servi sur un ordinateur client, puis le PC clients est d'appliquer le fuseau horaire local, ce qui est bien, si vous voulez que le temps relatif. CEPENDANT, ici, c'est le cas d'utilisation de mon produit: - je réserver un cheveu rendez-vous à Londres pour 4h vendredi, je vais à New York, le lundi, j'ai oublié lorsque le rendez-vous était donc j'ai une session dans le système & il me dit sa à 9 h le vendredi! Sinon, le serveur m'envoie un texto pour me dire que le rendez-vous est à 8 heures du soir (parce que le serveur est UTC)
Voir le
String getDisplayName(boolean daylight,int style)
méthode dansjava.util.TimeZone
. Le style peut êtreTimeZone.LONG
ouTimeZone.SHORT
avec le style court de retourner le nom court de la zone de temps.Une plus longue haleine approche est de vérifier la sortie de
String[] TimeZone.getAvailableIDs(int offset)
. Le temps court de la zone de codes peut être ambigu ou redondantes, alors peut-être que vous pourriez être plus approfondie à ce sujet:Curieux. Et lorsque l'entrée est
MESZ
le long de la sortie estGreenwich Mean Time
Mitteleuropäische Sommerzeit.
OriginalL'auteur mob
Vous pouvez utiliser le code suivant pour trouver les 3 chiffres abréviation pour n'importe quel fuseau horaire.
Date date = new Date();
, qui est l'application de l'horaire de n'importe quel appareil que vous êtes sur. ainsi, lorsque vous effectuez latz.inDaylightTime(date)
peu, c'est uniquement de déterminer si oui ou non votre appareil est en heure d'été et PAS de savoir si ou non ce moment sera l'heure d'été dans "Europe/London". Ainsi, si par exemple je lance ce code sur un PC à New York et avoir mon PC fuseau horaire défini pour l'EDT, ce code permettra de déterminer le statut de l'heure d'été à New York et non pas une "Europe/London"... Toute réflexion sur la façon de contourner!?!représente un point dans le temps (millisecondes écoulées depuis l'époque, à l'interne), donc ce n'est pas un problème. Pour le dire d'une autre façon, si je l'appelle
new Date()
à Boston et mon ami appellenew Date()
à Londres au même instant, notreDate
objets ont le même sous-jacent d'horodatage.Bien sûr, mais ce n'est pas le problème, je suis en train de résoudre. Mon problème est que la Date est stockée sur le serveur (UTC), mais quand cette même date est servi sur un ordinateur client, puis le PC clients est d'appliquer le fuseau horaire local, ce qui est bien, si vous voulez que le temps relatif. CEPENDANT, ici, c'est le cas d'utilisation de mon produit: - je réserver un cheveu rendez-vous à Londres pour 4h vendredi, je vais à New York, le lundi, j'ai oublié lorsque le rendez-vous était donc j'ai une session dans le système & il me dit sa à 9 h le vendredi! Sinon, le serveur m'envoie un texto pour me dire que le rendez-vous est à 8 heures du soir (parce que le serveur est UTC)
OriginalL'auteur dirtyhandsphp