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
?
10 réponses
Utilisation DateTimeFormat
:
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime dt = formatter.parseDateTime(string);
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"));
DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");
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);
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");
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();
}
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")
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?
- Java SE 8 , Java SE 9 , et plus tard
- Built-in.
- fait partie de L'API Java standard avec une implémentation groupée.
- Java 9 ajoute des fonctionnalités mineures et des corrections.
- Java SE 6 et Java SE 7
- une grande partie de la java.la fonctionnalité time est rétroportée à Java 6 & 7 dans ThreeTen-Backport .
- Android
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 .
une méthode simple:
public static DateTime transfStringToDateTime(String dateParam, Session session) throws NotesException {
DateTime dateRetour;
dateRetour = session.createDateTime(dateParam);
return dateRetour;
}
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