Solution possible: Convertir la date Java en une autre heure au format Date
Je l'ai parcouru mais je n'ai pas eu ma réponse.
J'ai une chaîne "2013-07-17T03: 58: 00.000Z" et je souhaite la convertir en date du même formulaire que nous obtenons en créant une nouvelle Date (). Date d = nouvelle Date () ;
L'heure devrait être à IST.Zone-Asia/Kolkata
Ainsi, la date pour la chaîne ci-dessus devrait être
Mer. Juil. 17 12:05:16 IST 2013 // Quelle que soit l'heure selon la norme indienne GMT + 0530
String s="2013-07-17T03:58:00.000Z";
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
TimeZone tx=TimeZone.getTimeZone("Asia/Kolkata");
formatter.setTimeZone(tx);
d= (Date)formatter.parse(s);
Utilisez le calendrier pour les fuseaux horaires.
TimeZone tz = TimeZone.getTimeZone("Asia/Calcutta");
Calendar cal = Calendar.getInstance(tz);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
sdf.setCalendar(cal);
cal.setTime(sdf.parse("2013-07-17T03:58:00.000Z"));
Date date = cal.getTime();
Pour cela cependant, je recommanderais Joda Time car il a de meilleures fonctions pour cette situation. Pour JodaTime, vous pouvez faire quelque chose comme ceci:
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
DateTime dt = dtf.parseDateTime("2013-07-17T03:58:00.000Z");
Date date = dt.toDate();
Une date n'a pas de fuseau horaire. Si vous voulez connaître la représentation sous forme de chaîne de la date dans le fuseau horaire indien, utilisez un autre SimpleDateFormat avec son fuseau horaire défini sur Indian Standard et formatez la date avec ce nouveau SimpleDateFormat.
EDIT: exemple de code:
String s = "2013-07-17T03:58:00.000Z";
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
Date d = formatter.parse(s);
System.out.println("Formatted Date in current time zone = " + formatter.format(d));
TimeZone tx=TimeZone.getTimeZone("Asia/Calcutta");
formatter.setTimeZone(tx);
System.out.println("Formatted date in IST = " + formatter.format(d));
Sortie (le fuseau horaire actuel est Paris - GMT + 2):
Formatted Date in current time zone = 2013-07-17T05:58:00.000+02
Formatted date in IST = 2013-07-17T09:28:00.000+05
Je voudrais apporter la réponse moderne. Et vous donner une suggestion: plutôt que de reproduire ce que Date.toString()
vous aurait donné, utilisez plutôt le format intégré pour les utilisateurs dans les paramètres régionaux pertinents:
String isoString = "2013-07-17T03:58:00.000Z";
String humanReadable = Instant.parse(isoString)
.atZone(userTimeZone)
.format(localizedFormatter);
System.out.println(humanReadable);
Sur mon ordinateur, cela imprime
17 July 2013 at 09.28.00 IST
Mon extrait utilise deux constantes
private static final ZoneId userTimeZone = ZoneId.of("Asia/Kolkata");
private static final DateTimeFormatter localizedFormatter = DateTimeFormatter
.ofLocalizedDateTime(FormatStyle.LONG)
.withLocale(Locale.getDefault(Locale.Category.FORMAT));
L'appel withLocale
est redondant lorsque nous passons juste les paramètres régionaux du format par défaut. Je le mets dans afin que vous ayez un endroit pour fournir des paramètres régionaux explicites, au cas où vos utilisateurs en auraient besoin. L’avantage de Nice est également de préciser que le résultat dépend des paramètres régionaux, au cas où quelqu'un lirait votre code ne l’aurait pas pensé.
J'utilise Java.time
, l'API Java moderne pour la date et l'heure. Il est tellement plus agréable de travailler avec les Date
, TimeZone
et les notoires problèmes DateFormat
et SimpleDateFormat
. Votre chaîne est conforme à la norme ISO 8601, format que les classes modernes analysent par défaut, c'est-à-dire sans formateur explicite.
Bien sûr, vous pouvez avoir le même format que celui que Date
vous aurait donné si vous en aviez besoin. Il suffit de remplacer le formateur ci-dessus par celui-ci:
private static final DateTimeFormatter asUtilDateFormatter
= DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ROOT);
Maintenant nous avons:
Wed Jul 17 09:28:00 IST 2013
En savoir plus sur l’utilisation de Java.time
dans le tutoriel Oracle et/ou trouver d’autres ressources.