J'ai une classe Java qui prend la latitude / longitude d'un lieu et renvoie le décalage GMT lorsque l'heure d'été est activée ou désactivée. Je cherche un moyen simple de déterminer en Java si la date actuelle est en heure avancée afin de pouvoir appliquer le décalage correct. Actuellement, je n’effectue ce calcul que pour les fuseaux horaires des États-Unis, bien que j’aimerais éventuellement l’étendre également aux fuseaux horaires mondiaux.
Réponses
Trop de publicités?Voici la réponse pour la machine sur laquelle la question est posée:
TimeZone.getDefault().inDaylightTime( new Date() );
Un serveur essayant de comprendre cela pour un client aura besoin du fuseau horaire du client. Voir @R. Bemrose répond pour la raison.
Pour un fuseau horaire particulier
TimeZone.getTimeZone( "US/Alaska").inDaylightTime( new Date() );
Vous devrez travailler un peu plus avec ces coordonnées et déterminer le fuseau horaire dans lequel elles se trouvent. Une fois que vous savez quel fuseau horaire, la méthode isDayLight () serait utile.
Par exemple, vous n’avez aucun moyen de dire si -0500 est HNE (heure normale de l’Est des États-Unis / Canada), CDT (heure avancée du Centre des États-Unis / Canada), COT (heure de la Colombie), AST (heure normale du Brésil), ECT (Équateur). Temps), etc ...
Certains d'entre eux peuvent ou non prendre en charge l'heure d'été.
Joda Time contient les méthodes de manipulation qui va calculer les décalages pour vous. Voir DateTimeZone.convertLocalToUTC(...)
Pour compléter cela, vous aurez besoin de regarder le fuseau horaire actuel avec votre latitude/longitude info. GeoNames fournit un client java pour son service web, ainsi que d'un simple cadre de la demande (c'est à dire http://ws.geonames.org/timezone?lat=47.01&lng=10.2)
http://developer.android.com/reference/java/util/TimeZone.html ceci indique que Android effectue automatiquement tous les calculs, y compris la lumière du jour.