java-simpledateformat-exemples



Aujourd'hui, je veux vous montrer quelques exemples de la façon dont vous pouvez utiliser la classe SimpleDateFormat dans votre code. J'espère que certains d'entre eux seront de nouveau et surprenant!
L'exemple de base :
La première utilisation la plus basique de la classe, permet de formater l'objet Date en une chaîne simple montrant jour, le mois et l'année:
1:
2:
3:
4:
5:
6:
SimpleDateFormat simpleDateFormat =
        new SimpleDateFormat("dd/MM/yy");
String dateAsString = simpleDateFormat.format(new Date());

System.out.println(dateAsString);
// Resulat: "12/11/09"
Un peu plus avancé :Évidemment, nous pouvons utiliser des format de date plus compliqués que celui là (voir SimpleDateFormat JavaDoc pour la liste complète). Nous pouvons aussi ajouter un peu de texte normal pour l'afficher avec la date, pour faire celà vous devez échapper le texte avec une apostrophe. Voici donc une façon élégante de l'impression de la date et l'heure:
1:
2:
3:
4:
5:
6:
SimpleDateFormat simpleDateFormat =
        new SimpleDateFormat("hh:mm 'o''clock on' MMMM dd yyyy");
String dateAsString = simpleDateFormat.format(new Date());

System.out.println(dateAsString);
// Result: "06:49 o'clock on November 12 2009"
Maintenant, avec Locale :
SimpleDateFormat dépend aussi du local, en offrant un Locale, vous pouvez obtenir la chaîne de la date localisée pour une langue ou un pays spécifique. Voici la date en français:
1:
2:
3:
4:
5:
6:
SimpleDateFormat simpleDateFormat =
        new SimpleDateFormat("dd MMMM yyyy zzzz G", Locale.FRENCH);
String dateAsString = simpleDateFormat.format(new Date());

System.out.println(dateAsString);
// Result: "12 novembre 2009 Heure du méridien de Greenwich ap. J.-C."
Parse String en Date :
Autre bonne chose sur la classe SimpleDateFormat c'est qu'il peut être utilisé non seulement pour la mise en forme, mais aussi pour convertir un String en Objet Date. Dans cet exemple, le format utilisé est exactement le même que celui retourné par la méthode Date.toString(). Dans cet exemple , nous allons essayer de convertir les chaînes créées par Data.toString() de nouveau en dates:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
// SimpleDateFormat that works exactly like Date.toString()
SimpleDateFormat simpleDateFormat =
        new SimpleDateFormat("E MMM dd HH:mm:ss zzz yyyy", Locale.ROOT);
Date today = new Date();

String dateAsString_format = simpleDateFormat.format(today);
String dateAsString_native = today.toString();
// Both strings are: "Thu Nov 12 18:49:36 GMT 2009"

Date parsedDate = simpleDateFormat.parse(dateAsString_native);
System.out.println(parsedDate.toString());
// Result: "Thu Nov 12 18:49:36 GMT 2009"
Changement du fuseau horaire par défaut :
Notez que lorsque vous convertissez une chaîne de caracteres en date, le résultat peut être ambiguë. Par exemple, la chaîne de caracteres "11h23 1 janvier 2001" est un moment différent selon où vous habitez, au Japon ou au Canada. Par défaut Java résout ce problème en utilisant votre fuseau horaire local obtenu à partir de la Locale par défaut. 

alors que le fuseau horaire ne peut pas être une partie de la chaîne de caracteres, vous pouvez le configurer manuellement au lieu d'utiliser l'un par défaut. Vous pouvez le faire avec la méthode settimezone():
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
SimpleDateFormat simpleDateFormat =
        new SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH);
Date date = simpleDateFormat.parse("13-07-1999");
System.out.println(date);
// Result: "Tue Jul 13 00:00:00 GMT 1999"

simpleDateFormat.setTimeZone(TimeZone.getTimeZone("PST"));
date = simpleDateFormat.parse("13-07-1999");
System.out.println(date);
// Result: "Tue Jul 13 08:00:00 GMT 1999"
Changement du siècle :
Ambiguïté similaire se produit lors de l'analyse des dates de l'année à deux chiffres. Par exemple "01/01/59" est le jour de la nouvelle année  1959 ou 2059. Cela peut être réglée en spécifiant le siècle à l'objet SimpleDateFormat, pour être plus précis avec set2DigitYearStart () méthode, vous pouvez spécifier la période de 100 ans dans lequel la date analysée sera placé. Par défaut, la période de 100 ans est [aujourd'hui - 80 ans, aujourd'hui + 20 années]. Voir l'exemple:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
SimpleDateFormat simpleDateFormat =
        new SimpleDateFormat("dd MMMM yy", Locale.ENGLISH);
Date date = simpleDateFormat.parse("1 November 45");
System.out.println(date);
// By default the year 45 will be taken from period (current year 2009) 1929 - 2029
// Result: "Thu Nov 01 00:00:00 GMT 1945"

Date startOf19thCentury = new GregorianCalendar(1801,1,1).getTime();
Date startOf21stCentury = new GregorianCalendar(2001,1,1).getTime();

simpleDateFormat.set2DigitYearStart(startOf19thCentury);
date = simpleDateFormat.parse("1 November 45");
System.out.println(date);
// After invoking set2DigitYearStart() the period is now 1801 - 1901
// Result: "Thu Nov 01 00:00:00 GMT 1845"

simpleDateFormat.set2DigitYearStart(startOf21stCentury);
date = simpleDateFormat.parse("1 November 45");
System.out.println(date);
// This time the period is 2001 - 2101
// Result: "Thu Nov 01 00:00:00 GMT 2045"
Rendre le parsing plus stricte :
Par défaut, la méthode de parsing de SimpleDateFormat est très indulgent. Si la chaîne fournie n'est pas entièrement compatible avec le format fournit, SimpleDateFormat au lieu d'abandonner essais avec beaucoup des heuristiques difficiles à deviner quelle serait la bonne réponse. Dans de nombreuses situations ce comportement est trés souhaitable, mais si vous n'aimez pas cela, vous pouvez le désactiver. Avec la méthode setLenient (), vous pouvez faire un parsing obéissent exactement le format donnée et lève une exception si la chaîne n'est pas valide. 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
SimpleDateFormat simpleDateFormat =
        new SimpleDateFormat("dd MMMM yyyy", Locale.ENGLISH);
Date date = simpleDateFormat.parse("31 April 1999");
System.out.println(date);
// Since April has only 30 days the parser will assume
// user meant April 30th + one day = May 1st
// Result: "Sat May 01 00:00:00 GMT 1999"

// Make the parsing more strict
simpleDateFormat.setLenient(false);
// This throws java.text.ParseException: Unparseable date: "31 April 1999"
date = simpleDateFormat.parse("31 April 1999");

0 commentaires:

Enregistrer un commentaire

Suivez nous sur facebook