Conversion d'une chaîne de date en un objet DateTime en utilisant la bibliothèque Joda Time

j'ai une date comme chaîne de caractères dans le format suivant "04/02/2011 20:27:05" . J'utilise la bibliothèque Joda-Time et je voudrais 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 ?

219
demandé sur try-catch-finally 2011-06-06 17:25:28

10 réponses

Utilisation DateTimeFormat :

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime dt = formatter.parseDateTime(string);
426
répondu Bozho 2013-08-22 11:02:01

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

DateTime date = DateTime.parse("04/02/2011 20:27:05", 
                  DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"));
59
répondu stephen.hanson 2018-08-21 17:05:48
DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");
19
répondu Shawn Vader 2016-09-02 08:12:46

des commentaires j'ai choisi une réponse comme et en ajoutant aussi le fuseau horaire:

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);
12
répondu Ali Karaca 2017-07-12 12:53:59

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");
11
répondu Karl-Bjørnar Øie 2011-06-06 13:35:04

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
répondu efirat 2017-11-06 16:05:44

vous avez besoin d'un DateTimeFormatter approprié au format que vous utilisez. Jetez un oeil aux docs pour des instructions sur la façon d'en construire un.

je pense que vous avez besoin de format = DateTimeFormat.forPattern("M/d/y H:m:s")

2
répondu Mark Tozzi 2013-08-22 11:03:42

tl; dr

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

de java.temps

l'approche moderne utilise le java.classes de temps qui supplantent le vénérable Joda-Time projet.

parle comme un LocalDateTime car votre entrée manque de tout 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 la norme ISO 8601 pour échanger des valeurs date-heure sous forme de texte plutôt que sous forme de format ici. Commodément, la java.les classes de temps utilisent les formats standards lors de l'analyse/génération de chaînes.


à Propos de java.temps

Le de java.time framework est construit dans Java 8 et plus tard. Ces classes supplantent les vieux héritage date-heure classes telles que java.util.Date , Calendar , & SimpleDateFormat .

le projet Joda-Time , maintenant en mode maintenance , conseille la migration vers le java.temps classes.

pour en savoir plus, voir le Oracle Tutorial . Et rechercher le débordement de la pile pour de nombreux exemples et explications. La spécification est JSR 310 .

où obtenir le java.les classes de temps?

le ThreeTen-Extra projet étend java.temps avec des cours supplémentaires. Ce projet est un terrain d'expérimentation pour d'éventuelles futures additions à java.temps. Vous pouvez trouver ici quelques cours utiles tels que: Interval , YearWeek , YearQuarter , et plus .

2
répondu Basil Bourque 2017-12-30 23:31:35

une méthode simple:

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

    return dateRetour;
}
1
répondu sissi49 2017-07-12 12:54:29

Il y a les deux façons ce 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
-1
répondu Dulith De Cozta 2018-07-25 07:06:26