web-dev-qa-db-fra.com

Conversion de chaîne au format T-Z en date

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);
15
user2511713

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();
22
Mark M

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
4
JB Nizet

Java.time

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.

Même format que Date vous a donné

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

Lien vers le tutoriel

En savoir plus sur l’utilisation de Java.time dans le tutoriel Oracle et/ou trouver d’autres ressources.

0
Ole V.V.