web-dev-qa-db-fra.com

Récupérer les valeurs de mois, jour et année d'une chaîne à l'aide de Java

Comment extraire les valeurs de jour, mois et année d'une chaîne [comme 18/08/2012]. J'ai essayé d'utiliser SimpleDateFormat, mais il renvoie un objet Date et j'ai observé que toutes les méthodes Get sont obsolètes. Y a-t-il une meilleure façon de faire cela?

Merci

13
usp

Personnellement, je voudrais utiliser Joda Time , qui simplifie considérablement la vie. En particulier, cela signifie que vous n'avez pas besoin de vous soucier du fuseau horaire de la variable Calendar par rapport au fuseau horaire d'une variable SimpleDateFormat. Vous pouvez simplement analyser une variable LocalDate, ce que les données vraiment vous indiquent. Cela signifie également que vous n'avez pas à vous soucier de la période de 0 mois :)

Joda Time rend les opérations de date/heure beaucoup plus agréables.

import Java.util.*;
import org.joda.time.*;
import org.joda.time.format.*;

public class Test {

    public static void main(String[] args) throws Exception {
        DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy")
            .withLocale(Locale.UK);

        LocalDate date = formatter.parseLocalDate("18/08/2012");

        System.out.println(date.getYear());  // 2012
        System.out.println(date.getMonthOfYear()); // 8
        System.out.println(date.getDayOfMonth());   // 18
    }
}
21
Jon Skeet

Il suffit d'aller pour String.split(),

String str[] = "18/08/2012".split("/");
int day = Integer.parseInt(str[0]);
int month = Integer.parseInt(str[1]);
..... and so on
14
jayantS

Cela devrait vous aider sans ajouter de bocaux externes

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");  
Date parse = sdf.parse("18/08/2012");  
Calendar c = Calendar.getInstance();  
c.setTime(parse);  
System.out.println(c.get(Calendar.MONTH) + c.get(Calendar.DATE) + c.get(Calendar.YEAR)); 
8
Srujan Kumar Gulla

Créez un objet Java.util.Calendar hors de cette date comme suit et extrayez les parties de date:

Calendar cal = Calendar.getInstance();
cal.setTime(<date from simple-date-format).
cal.get(Calendar.MONTH);

etc.,

5
Vikdor

tl; dr

Java.time.LocalDate.parse(
    "18/08/2012" , 
    DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) 
).getDayOfMonth​() // .getYear​() .getMonth()

Java.time

L'approche moderne utilise les classes Java.time. Évitez les anciennes classes problématiques telles que Date & Calendar.

LocalDate

String input = "18/08/2012" ;

La classe LocalDate représente une valeur de date uniquement sans heure et sans fuseau horaire.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate ld = LocalDate.parse( input , f ) ;

ld.toString (): 2012-08-18

Méthodes Getter

Interroger les pièces.

int d = ld.getDayOfMonth​() ;
int m = ld.getMonthValue() ;
int y = ld.getYear() ;

À propos de Java.time

La structure Java.time est intégrée à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes gênantes legacy telles que Java.util.Date , Calendar , & SimpleDateFormat .

Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers les classes Java.time .

Pour en savoir plus, voir le Oracle Tutorial . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .

Où obtenir les classes Java.time? 

  • Java SE 8 , Java SE 9 , et plus tard
    • Intégré. 
    • Partie de l'API Java standard avec une implémentation intégrée.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et Java SE 7
    • Une grande partie de la fonctionnalité Java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
  • Android
    • Les versions ultérieures d'Android regroupent des implémentations des classes Java.time.
    • Pour les versions antérieures d'Android, le projet ThreeTenABP adapte ThreeTen-Backport (mentionné ci-dessus). Voir Comment utiliser ThreeTenABP… .

Le projet ThreeTen-Extra étend Java.time avec des classes supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts à Java.time. Vous pouvez y trouver des classes utiles telles que Interval , YearWeek , YearQuarter et more .

2
Basil Bourque

Utilisez ceci et transmettez la valeur de date

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date parse = sdf.parse(""18/01/2018);
Calendar calendar = Calendar.getInstance();
calendar.setTime(parse);
int date = calendar.get(Calendar.DATE);
//+1 Is Important Because if the month is January then coming 0 so Add +1
int month = calendar.get(Calendar.MONTH)+1;
int year = calendar.get(Calendar.YEAR);
System.out.println("Date:"+date +":Month:"+ month + ":Year:"+year);
1
Abhijit Patra

Une autre approche peut être utiliser Calendar object get(Calendar.MONT)

Exemple:

Calendar cal = Calendar.getInstance();
cal.setTime(dateObj).
cal.get(Calendar.MONTH);

(ou) 

Vous pouvez utiliser String.split () also.

1
kosa