1
votes

Convertir la date de chaîne en date au format ISO

J'ai besoin de convertir une date de chaîne en un autre format de chaîne date

String current = "Tue Apr 16 10:59:11 EDT 2019";

Je souhaite obtenir la date de résultat Chaîne au format ISO-8601 conformément au modèle - "aaaa-MM-jj 'T'HH: mm: ss.SSSXX "

Pourriez-vous s'il vous plaît m'aider à mettre en œuvre ceci?


2 commentaires

Est-ce que EDT est l'heure avancée de l'Est australien, l'heure avancée de l'Est de l'Amérique du Nord ou autre chose? Oui, je sais que l’été a pris fin dans la majeure partie de l’Australie le 7 avril, mais je tenais à souligner que les abréviations de fuseau horaire à trois lettres sont souvent ambiguës, vous ne devriez donc pas vous y fier. Il semble également que vous ayez obtenu la sortie de Date.toString () . Mieux vaut convertir l'objet Date lui-même.


liotur, je ne prétends pas que cette question soit une copie exacte de chacune des questions auxquelles j'ai lié. Si vous combinez plutôt les informations de deux ou plusieurs des questions liées, je pense que vous devriez être en mesure d'effectuer la conversion que vous souhaitez. Vous pouvez également rechercher, bien sûr, et vous en trouverez certainement plus.


3 Réponses :


1
votes

Il y a un SimpleDateFormat en java, et il y a une méthode d'analyse dedans

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

String dateString = format.format( new Date()   );
Date   date       = format.parse ( "2009-12-31" );      


3 commentaires

votre chaîne de format dans le constructeur SimpleDateFormat ne correspond pas au format de date @liotur


Il existe une analyse et une méthode de formatage. OP aura besoin de deux formats de date, l'un pour analyser leur chaîne dans une date / heure, l'autre pour formater cette date / heure dans une autre chaîne.


Veuillez ne pas apprendre aux jeunes à utiliser la classe SimpleDateFormat , obsolète depuis longtemps et notoirement gênante. Du moins pas comme première option. Et pas sans aucune réserve. Aujourd'hui, nous avons tellement mieux dans java.time , le Java moderne API de date et d'heure et son DateTimeFormatter .



1
votes

Aucune des classes de temps de Java n'implémente pleinement ISO 8601, mais vous pouvez essayer avec Java 8:

ZonedDateTime zp = ZonedDateTime.parse(string);
Date date = Date.from(zp.toInstant());
SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXX");
System.out.println(dt1.format(date));


4 commentaires

Pourquoi mélangez-vous les classes de temps java.util. * Avec les classes java.time. *? Ils ne sont pas conçus pour aider lorsqu'ils sont mélangés. Eh bien, il y a une raison pour laquelle les classes java.time. * Ont été inventées malgré l'existence précédente et insatisfaisante des autres.


@kumesana Bien sûr, vous pouvez utiliser LocalDateTime à la place de Date si cette suite en a besoin.


Il ne s'agit pas de peut , il s'agit de devrait . Utilisez les classes de temps java.util. * Ou java.time. *. Cela fonctionne bien et très bien. Ne les mélangez pas. Cela force une bizarrerie inutile et encourage à faire des choses qui ne fonctionnent pas comme le programmeur l'avait imaginé. Cependant, mieux vaut ne pas utiliser du tout les classes de temps java.util. *, Compte tenu de la qualité de java.time. *.


De plus, cela ne fonctionnera pas avec la chaîne de la question (convenez que dans Java 8, vous devez rester loin de SimpleDateFormat et des autres classes anciennes et gênantes).



2
votes

En utilisant l'API Java8 DateTime, vous pouvez faire quelque chose comme ceci:

     //format your zonedDateTime with a new provided pattern
     String test = zonedDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXX"));
     //print it
     System.out.println(test);

Obtenez-le dans le format de votre choix:

     //your input
     String date = "Tue Apr 16 10:59:11 EDT 2019";
     //create new formatter for parsing your input
     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM d HH:mm:ss zzz yyyy", Locale.ENGLISH);
     //create new zonedDateTime from parsing an input with provided formatter
     ZonedDateTime zonedDateTime = ZonedDateTime.parse(date,formatter);


0 commentaires