Je veux convertir String
en Date
dans différents formats.
Par exemple,
Je reçois de l'utilisateur,
String fromDate = "19/05/2009"; // i.e. (dd/MM/yyyy) format
Je veux convertir cette fromDate
en tant qu'objet Date au format "yyyy-MM-dd"
Comment puis-je faire ceci?
Jetez un oeil à SimpleDateFormat
. Le code ressemble à ceci:
SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
String reformattedStr = myFormat.format(fromUser.parse(inputString));
} catch (ParseException e) {
e.printStackTrace();
}
Utilisez la SimpleDateFormat
class:
private Date parseDate(String date, String format) throws ParseException
{
SimpleDateFormat formatter = new SimpleDateFormat(format);
return formatter.parse(date);
}
Usage:
Date date = parseDate("19/05/2009", "dd/MM/yyyy");
Pour plus d'efficacité, vous souhaitez stocker vos formateurs dans une table de hachage. Le hashmap est un membre statique de votre classe util.
private static Map<String, SimpleDateFormat> hashFormatters = new HashMap<String, SimpleDateFormat>();
public static Date parseDate(String date, String format) throws ParseException
{
SimpleDateFormat formatter = hashFormatters.get(format);
if (formatter == null)
{
formatter = new SimpleDateFormat(format);
hashFormatters.put(format, formatter);
}
return formatter.parse(date);
}
LocalDate.parse(
"19/05/2009" ,
DateTimeFormatter.ofPattern( "dd/MM/uuuu" )
)
Les autres réponses avec Java.util.Date
, Java.sql.Date
et SimpleDateFormat
sont maintenant obsolètes.
LocalDate
La manière moderne de faire date-heure consiste à travailler avec les classes Java.time, en particulier LocalDate
. La classe LocalDate
représente une valeur de date uniquement sans heure et sans fuseau horaire.
DateTimeFormatter
Pour analyser ou générer une chaîne représentant une valeur date-heure, utilisez la classe DateTimeFormatter
.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
LocalDate ld = LocalDate.parse( "19/05/2009" , f );
Ne confondez pas un objet date-heure avec une chaîne représentant sa valeur. Un objet date-heure a no format, contrairement à une chaîne. Un objet date-heure, tel que LocalDate
, peut générer une chaîne pour représenter sa valeur interne, mais l'objet date-heure et la chaîne sont des objets distincts.
Vous pouvez spécifier n'importe quel format personnalisé pour générer une chaîne. Ou laissez Java.time faire le travail de localisation automatique.
DateTimeFormatter f =
DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH ) ;
String output = ld.format( f );
Dump à la console.
System.out.println( "ld: " + ld + " | output: " + output );
ld: 2009-05-19 | sortie: mardi 19 mai 2009
_ { Voir en action sur IdeOne.com .
Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes gênantes héritées _ date-heure telles que Java.util.Date
, Calendar
_, & SimpleDateFormat
.
Le projet Joda-Time , désormais en mode { mode maintenance }, conseille la migration vers les classes Java.time .
Pour en savoir plus, consultez le Oracle Tutorial . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Vous pouvez échanger des objets Java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou une version ultérieure. Pas besoin de chaînes, pas besoin de Java.sql.*
classes.
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 ajouts à Java.time. Vous pouvez y trouver des classes utiles telles que Interval
_, YearWeek
, YearQuarter
_ et plus _.
Convertir une date de chaîne en Java.sql.Date
String fromDate = "19/05/2009";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Java.util.Date dtt = df.parse(fromDate);
Java.sql.Date ds = new Java.sql.Date(dtt.getTime());
System.out.println(ds);//Mon Jul 05 00:00:00 IST 2010
Vérifiez les javadocs pour Java.text.SimpleDateFormat
Il décrit tout ce dont vous avez besoin.
Bien que SimpleDateFormat
fonctionne réellement pour vos besoins, vous pouvez également consulter Joda Time , qui constitue apparemment la base de la bibliothèque Date refondue dans Java 7. Bien que je ne l'aie pas beaucoup utilisée Je n’ai entendu que de bonnes choses à ce sujet et, si vous avez beaucoup manipulé les dates dans vos projets, il vaudrait probablement la peine de les examiner.
Un moyen simple de formater une date et de la convertir en chaîne
Date date= new Date();
String dateStr=String.format("%td/%tm/%tY", date,date,date);
System.out.println("Date with format of dd/mm/dd: "+dateStr);
sortie: date au format jj/mm/jj: 21/10/2015
Un objet Date
n'a pas de format , c'est une représentation. La date peut être présentée par une String
avec le format que vous aimez .
Par exemple. "yyyy-MM-dd
", "yy-MMM-dd
", "dd-MMM-yy
", etc.
Pour ce faire, vous pouvez utiliser SimpleDateFormat
Essaye ça,
String inputString = "19/05/2009"; // i.e. (dd/MM/yyyy) format
SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date dateFromUser = fromUser.parse(inputString); // Parse it to the exisitng date pattern and return Date type
String dateMyFormat = myFormat.format(dateFromUser); // format it to the date pattern you prefer
System.out.println(dateMyFormat); // outputs : 2009-05-19
} catch (ParseException e) {
e.printStackTrace();
}
Cette sortie: 2009-05-19