Comment faire Date indépendant des paramètres régionaux?
J'ai une db, qui stocke les dates dans OleDateTime
format GMT fuseau horaire. J'ai mis en place une classe, l'extension de Date
en java pour la représenter dans le classique format de date. Mais ma classe est dépendant de paramètres régionaux (je suis en GMT+2). Par conséquent, il convertit la date dans la base de données comme date - 2 hours
. Comment puis-je faire convertir la date correctement? Je veux ma classe à être indépendant des paramètres régionaux, toujours à l'aide GMT fuseau horaire. En fait, la question est:
class MyOleDateTime extends Date {
static {
Locale.setDefault(WhatGoesHere?)
}
//... some constructors
//... some methods
}
OriginalL'auteur folone | 2010-04-23
Vous devez vous connecter pour publier un commentaire.
Bien, c'est mieux d'utiliser le Calendrier de l'objet comme suggéré dans d'autres réponses. Toutefois, si vous vraiment souhaitez définir mondial de fuseau horaire, vous pouvez utiliser
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
tôt dans le code de votre application. Il est égalementuser.timezone
propriété système Java.Aussi (juste le fun de savoir), il apparaît que le seul pays réellement vivant par GMT/UTC (sans l'heure d'été à modifications) est du Libéria.
En fait,
Date
objets eux-mêmes sont toujours locale et le fuseau horaire. SongetTime()
méthode renverra toujours le nombre de millisecondes écoulées depuis le 1er janvier 1970 00:00:00 (pas de comptage des secondes intercalaires) en UTC. Mais si vous voulez obtenir quelque chose d'autre que millisecondes, vous devez utiliserCalendar
, qui est fuseau horaire-dépendante. Mais c'est la bonne façon d'aller. Vous n'utilisez pas que des méthodes obsolètes dansDate
classe, pensez-vous?soupir Et là, il va, heureux de faire la mauvaise chose...
Mais je n'ai vraiment pas avoir un accès au code client, qui utilise ma classe. Et il t utilise le obsolète Date de l'api. Que dois-je faire ensuite?
Je n'ai actuellement pas. Mais je suis à peu près certain que mes clients n'. Alors, comment dois-je faire les choses, sans briser leur code?
Si vous ne pouvez pas les amener à corriger leurs déjà cassé le code, vous devrez vivre avec une application qui peut casser à tout moment certaines modifications de code le fuseau horaire par défaut.
OriginalL'auteur Alexander Temerev
Que Michael Borgwardt a déjà dit, la Java
Date
objet ne sait rien sur les fuseaux horaires. C'est juste un wrapper pour un certain nombre de millisecondes écoulées depuis le 01-01-1970 00:00:00 UTC.Vous commencer à traiter avec les fuseaux horaires uniquement lorsque vous convertir le
Date
objet d'unString
à l'aide d'unDateFormat
. Vous définissez le fuseau horaire sur leDateFormat
de préciser dans quel fuseau horaire vous souhaitez voir leDate
.OriginalL'auteur Jesper
Un Date est indépendant des paramètres régionaux, toujours à l'aide GMT fuseau horaire. C'est juste un wrapper autour d'une milliseconde d'horodatage au format GMT (plus correctement: UTC).
Les seules choses dans
Date
qui sont fuseau horaire à charge sont les méthodes obsolètes commegetDay()
- c'est pourquoi ils sont obsolètes. Ceux qui l'utilisent le fuseau horaire par défaut. La bonne chose à faire est d'éviter d'utiliser ces méthodes obsolètes - pas pour définir le fuseau horaire par défaut à l'UTC! Qui pourraient causer des problèmes ailleurs, et vous ne pouvez pas empêcher d'autres parties du code de réglage du fuseau horaire par défaut pour quelque chose d'autre.OriginalL'auteur Michael Borgwardt
Utiliser un Calendrier objet:
OriginalL'auteur kgiannakakis
Voici un morceau de code que j'ai utilisé pour calculer le décalage GMT à partir de la
Calendar
instance et de le formater. J'apprécie toute l'aide que j'ai reçu de ce site, c'est agréable de contribuer. J'espère que cela aide quelqu'un, quelque part. Profitez de.OriginalL'auteur James Ovcarik