Comment puis-je convertir 2010-12-15T16: 26: 49,841 à 08: 00 à un GregorianCalendar en Java? [dupliquer]

StackOverflow https://stackoverflow.com/questions/4457108

Question

    

Cette question a déjà une réponse ici:

         

J'ai une date de chaîne « 2010-12-15T16: 26: 49,841 à 08: 00 » et je dois le convertir en un GregorianCalendar en Java. Comment faites-vous cela?


Solution de la réponse de Jesper

Code pour la solution en utilisant le temps de Joda:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ").withOffsetParsed();
DateTime date = formatter.parseDateTime("2010-12-15T16:26:49.841-08:00");
Était-ce utile?

La solution

Malheureusement, la classe standard SimpleDateFormat ne peut pas gérer format ISO 8601 très bien. Plus précisément, il ne peut pas gérer la : qui est dans le fuseau horaire de décalage à la fin.

Ce que vous pouvez faire est de supprimer manuellement le : du décalage horaire, de sorte que vous obtenez une chaîne qui ressemble à ceci:

2010-12-15T16:26:49.841-0800

(notez que le décalage horaire est -0800 au lieu de -08:00). Ensuite, vous pouvez l'analyser avec SimpleDateFormat avec le format yyyy-MM-dd'T'HH:mm:ss.SSSZ.

Mais il est préférable d'utiliser la bibliothèque populaire Joda-Time pour les temps de traitement et les dates; il est beaucoup mieux que la date de l'API Java standard et calendrier des classes et des poignées format ISO 8601 correctement.

Autres conseils

Utilisez SimpleDateFormat, voir javadocs ici:

convertir ensuite la date au calendrier. Jetez un oeil à beaucoup d'exemples ici:

Vous pouvez essayer avec ce morceau de code

DateTimeFormatter formatter =
    DateTimeFormat.forPattern("your pattern").withOffsetParsed();
DateTime dateTime = formatter.parseDateTime("your input");
GregorianCalendar cal = dateTime.toGregorianCalendar();

Cela vous donnera certainement le calendrier grégorien Objet

 String dateTimeString="2010-12-15T16:26:49.841-08:00"; 

 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

 DateTime dateTime = formatter.parseDateTime(dateTimeString);

 GregorianCalendar cal = dateTime.toGregorianCalendar();

Les autres réponses sont correctes mais maintenant dépassée. Ils utilisent des classes ennuyeuses vieilles maintenant supplanté par le cadre de java.time.

Utilisation java.time

La chaîne d'entrée arrive à se conformer aux ISO 8601 mise en forme standard. Donc pas besoin de spécifier un modèle de formatage comme les classes java.time utilisent ISO 8601 par défaut lors de l'analyse / génération de chaînes.

La chaîne d'entrée comprend un offset de-UTC, donc on parse comme OffsetDateTime.

String input = "2010-12-15T16:26:49.841-08:00" ;
OffsetDateTime odt = OffsetDateTime.parse( input );

Si vous avez un fuseau horaire spécifique à l'esprit, plutôt qu'une simple offset de-UTC, appliquer cela.

ZoneId zoneId = ZoneId.of( "America/Los_Angele" );
ZonedDateTime zdt = odt.atZone( zoneId );

GregorianCalendar

Vous devez éviter les anciennes classes de date-heure, comme GregorianCalendar. Mais si vous devez interopérer avec l'ancien code non encore mis à jour pour java.time, vous pouvez convertir. Utiliser de nouvelles méthodes ajoutées aux anciennes classes de conversion. Pour plus d'informations et un schéma astucieux, voir mon Question et réponse .

Calendar cal = java.util.GregorianCalendar.from( zdt );  // Do such conversions out of java.time only if absolutely necessary.

A propos de java.time

Le java.time cadre est construit en Java 8 et versions ultérieures. Ces classes remplacent les anciennes classes date temps gênants tels que java.util.Date, .Calendar, et java.text.SimpleDateFormat.

Le projet du Joda-Time, maintenant mode maintenance , conseille la migration vers java.time.

Pour en savoir plus, consultez le Oracle Tutoriel . Et la recherche Stack Overflow pour de nombreux exemples et explications.

La plupart des fonctionnalités de java.time est de retour à Java 6 portage et 7 ThreeTen-Backport et en outre adapté pour applications ThreeTenABP .

Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour des ajouts futurs possibles à java.time. Vous trouverez peut-être des classes utiles ici, comme Interval, YearWeek, YearQuarter, et plus encore.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top