Je suis nouveau sur Java, je travaille généralement avec PHP.
J'essaye de convertir cette chaîne:
Lun 14 mars 16:02:37 GMT 2011
Dans un objet de calendrier afin que je puisse facilement extraire l'année et le mois comme ceci:
String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);
Serait-ce une mauvaise idée de l'analyser manuellement? Vous utilisez une méthode de sous-chaîne?
Tout conseil aiderait merci!
Réponses:
Remarque: définir
Locale
selon votre environnement / exigenceVoir également
la source
java.time
. Ce Q / R est assez important sur Google.tl; dr
L'approche moderne utilise les classes java.time .
Évitez les anciennes classes date-heure
La manière moderne est d'utiliser les classes java.time. Les anciennes classes de date-heure telles que celles-ci se
Calendar
sont avérées mal conçues, déroutantes et gênantes.Définissez un formateur personnalisé pour correspondre à votre entrée de chaîne.
Analyser comme un fichier
ZonedDateTime
.Vous êtes intéressé par l'année et le mois. Les classes java.time incluent une
YearMonth
classe à cet effet.Vous pouvez interroger les numéros de l'année et du mois si nécessaire.
Mais la
toString
méthode génère une chaîne au format standard ISO 8601 .Mettez tout cela ensemble.
Dump dans la console.
Code en direct
Voir ce code en cours d'exécution dans IdeOne.com .
Conversion
Si vous devez avoir un
Calendar
objet, vous pouvez le convertir en un enGregorianCalendar
utilisant de nouvelles méthodes ajoutées aux anciennes classes.À propos de java.time
Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que
java.util.Date
,Calendar
, etSimpleDateFormat
.Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers java.time.
Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Où obtenir les classes java.time?
Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels futurs ajouts à java.time. Vous trouverez peut - être des classes utiles ici, comme
Interval
,YearWeek
,YearQuarter
et plus .la source
Eh bien, je pense que ce serait une mauvaise idée de reproduire le code qui est déjà présent dans des classes comme
SimpleDateFormat
.D'un autre côté, personnellement, je suggérerais d'éviter
Calendar
etDate
entièrement si vous le pouvez, et d'utiliser Joda Time à la place, comme une API de date et d'heure bien mieux conçue. Par exemple, vous devez être conscient que ceSimpleDateFormat
n'est pas thread-safe, vous avez donc besoin soit de threads locals, de synchronisation ou d'une nouvelle instance à chaque fois que vous l'utilisez. Les analyseurs et formateurs Joda sont thread-safe.la source
java.time
c'est la voie à suivre, Basil Bourque a fourni une excellente réponse.Aucun nouveau calendrier ne doit être créé, SimpleDateFormat utilise déjà un calendrier en dessous.
(Je ne peux pas encore commenter, c'est pourquoi j'ai créé une nouvelle réponse)
la source
SimpleDateFormat
c'est génial, notez simplement queHH
c'est différent duhh
travail avec des heures.HH
retournera des heures basées sur 24 heures et hh retournera des heures basées sur 12 heures.Par exemple, ce qui suit renverra 12 heures:
Bien que cela revienne 24 heures:
la source
Analyser une heure avec le fuseau horaire,
Z
dans le modèle est pour le fuseau horaireSortie: il renverra l'heure UTC
Si nous ne définissons pas le fuseau horaire selon un modèle comme
yyyy-MM-dd'T'HH:mm:ss
.SimpleDateFormat
utilisera le fuseau horaire défini dansSetting
la source
Oui, ce serait une mauvaise pratique de l'analyser vous-même. Jetez un œil à SimpleDateFormat , il transformera la chaîne en une date et vous pourrez définir la date en une instance de calendrier.
la source
Méthode simple:
la source