web-dev-qa-db-fra.com

Groovy String à ce jour

Je code ceci avec Groovy 

J'essaie actuellement de convertir une chaîne que j'ai en date sans avoir à faire quelque chose de trop fastidieux. 

String theDate = "28/09/2010 16:02:43";
def newdate = new Date().parse("d/M/yyyy H:m:s", theDate)

Sortie: 

Tue Aug 10 16:02:43 PST 2010

Le code ci-dessus fonctionne très bien, cependant lorsque ma chaîne change comme suit:

String testDate = "Tue Aug 10 16:02:43 PST 2010"
def newerdate = new Date().parse("d/M/yyyy H:m:s", testDate)

Cela me dit qu '"il n'y a pas une telle valeur pour Tue". J'ai essayé de jeter un 'E' dans l'analyse de la date mais il a été dit que la date ne pouvait pas être analysée.

Quelqu'un peut-il expliquer comment procéder pour analyser le deuxième exemple?

63
StartingGroovy

Le premier argument à analyser () est le format attendu. Vous devez changer cela en Date.parse("E MMM dd H:m:s z yyyy", testDate) pour que cela fonctionne. (Notez que vous n'avez pas besoin de créer un nouvel objet Date, c'est une méthode statique)

Si vous ne savez pas à l'avance quel format, vous devrez trouver une bibliothèque d'analyse syntaxique spéciale pour cela. En Ruby, il existe une bibliothèque appelée Chronic , mais je ne connais pas d'équivalent Groovy. Edit: Il existe un port Java de la bibliothèque appelé jChronic , vous pouvez le vérifier.

66
Mark Thomas

Essaye ça: 

def date = Date.parse("E MMM dd H:m:s z yyyy", dateStr)

Voici les modèles pour formater les dates

24
gcores

JChronic est votre meilleur choix. Voici un exemple qui ajoute une méthode .fromString() à la classe Date et qui analyse presque tout ce que vous pouvez lui lancer:

Date.metaClass.'static'.fromString = { str ->
    com.mdimension.jchronic.Chronic.parse(str).beginCalendar.time
}

Vous pouvez l'appeler comme ça:

println Date.fromString("Tue Aug 10 16:02:43 PST 2010")
println Date.fromString("july 1, 2012")
println Date.fromString("next tuesday")
24
ataylor

Date#parse est obsolète. L'alternative est: 

Java.text.DateFormat#parse 

donc : 

 new SimpleDateFormat("E MMM dd H:m:s z yyyy", Locale.ARABIC).parse(testDate)

Notez que SimpleDateFormat est une implémentation de DateFormat

2
Abdennour TOUMI

Je pense que le meilleur moyen simple dans ce cas est d’utiliser parseToStringDate qui constitue l’une des améliorations de Groovy JDK:

Analyser une chaîne correspondant au modèle EEE MMM jj HH: mm: ss zzz yyyy contenant uniquement les constantes locales US (par exemple, samedi pour les samedis). Tel que chaîne est générée par la méthode toString de Date

Exemple:

println (Date.parseToStringDate("Tue Aug 10 16:02:43 PST 2010").format('MM-dd-yyyy'))​

J'espère que cela t'aides.

0
bitsnaps

Vous trouverez ci-dessous la façon dont nous allons dans notre application en développement.

import Java.text.SimpleDateFormat

String newDateAdded = "2018-11-11T09:30:31"
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
Date dateAdded = dateFormat.parse(newDateAdded)

println(dateAdded)

La sortie ressemble à

Sun Nov 11 09:30:31 GMT 2018

Dans votre exemple, nous pourrions nous adapter un peu pour répondre à vos besoins. Si j'étais vous, je ferai:

String datePattern = "d/M/yyyy H:m:s"
String theDate = "28/09/2010 16:02:43"
SimpleDateFormat df = new SimpleDateFormat(datePattern)
println df.parse(theDate)

J'espère que cela vous aiderait beaucoup.

0
Tung