web-dev-qa-db-fra.com

Conversion d'une chaîne de date en objet DateTime à l'aide de la bibliothèque Joda Time

J'ai une date sous forme de chaîne au format suivant: "04/02/2011 20:27:05". J'utilise la bibliothèque Joda-Time et j'aimerais la convertir en objet DateTime. J'ai fait:

DateTime dt = new DateTime("04/02/2011 20:27:05")

Mais j'obtiens l'erreur suivante:

Invalid format: "04/02/2011 14:42:17" is malformed at "/02/2011 14:42:17"

Comment convertir la date ci-dessus en un objet DateTime?

224
Tom

Utilisez DateTimeFormat :

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime dt = formatter.parseDateTime(string);
441
Bozho

Je sais que c’est une vieille question, mais je voulais ajouter que, à partir de JodaTime 2.0, vous pouvez le faire avec une ligne:

DateTime date = DateTime.parse("04/02/2011 20:27:05", 
                  DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"));
61
stephen.hanson
DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");
19
Shawn Vader

A partir de commentaires, j'ai choisi une réponse comme, mais aussi en ajoutant TimeZone:

String dateTime = "2015-07-18T13:32:56.971-0400";

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
        .withLocale(Locale.ROOT)
        .withChronology(ISOChronology.getInstanceUTC());

DateTime dt = formatter.parseDateTime(dateTime);
14
Ali Karaca

Votre format n'est pas le format ISO attendu, vous devriez essayer

DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime time = format.parseDateTime("04/02/2011 20:27:05");
12

Vous pouvez également utiliser SimpleDateFormat , comme dans DateTimeFormat

Date startDate = null;
Date endDate = null;
try {
    if (validDateStart!= null) startDate = new SimpleDateFormat("MM/dd/yyyy HH:mm", Locale.ENGLISH).parse(validDateStart + " " + validDateStartTime);
    if (validDateEnd!= null) endDate = new SimpleDateFormat("MM/dd/yyyy HH:mm", Locale.ENGLISH).parse(validDateEnd + " " + validDateEndTime);
} catch (ParseException e) {
    e.printStackTrace();
}
4
efirat

Vous avez besoin d'un DateTimeFormatter approprié au format que vous utilisez. Consultez la documentation pour savoir comment en créer un.

D'emblée, je pense que vous avez besoin de format = DateTimeFormat.forPattern("M/d/y H:m:s")

2
Mark Tozzi

tl; dr

Java.time.LocalDateTime.parse( 
    "04/02/2011 20:27:05" , 
    DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" )
)

Java.time

L'approche moderne utilise les classes Java.time qui supplantent le vénérable projet Joda-Time.

Analyser comme un LocalDateTime car votre entrée ne contient aucun indicateur de fuseau horaire ou de décalage par rapport à UTC.

String input = "04/02/2011 20:27:05" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;

ldt.toString (): 2011-02-04T20: 27: 05

Conseil: Dans la mesure du possible, utilisez les formats standard ISO 8601 lorsque vous échangez des valeurs date-heure sous forme de texte plutôt que sous le format présenté ici. De manière pratique, les classes Java.time utilisent les formats standard lors de l’analyse/génération de chaînes.


À propos de Java.time

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 maintenance , conseille de migrer vers les classes Java.time .

Pour en savoir plus, consultez le Tutoriel 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 ajouts à Java.time. Vous pouvez y trouver des classes utiles telles que Interval _, YearWeek , YearQuarter _ et plus _.

2
Basil Bourque

Une méthode simple:

public static DateTime transfStringToDateTime(String dateParam, Session session) throws NotesException {
    DateTime dateRetour;
    dateRetour = session.createDateTime(dateParam);                 

    return dateRetour;
}
1
sissi49

Il y a deux manières cela pourrait être réalisé .

DateTimeFormat

DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");

SimpleDateFormat

        String dateValue = "04/02/2011 20:27:05";
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); //  04/02/2011 20:27:05

        Date date = sdf.parse(dateValue); // returns date object
        System.out.println(date); // outputs: Fri Feb 04 20:27:05 IST 2011
0
Dulith De Costa