2010-01-18 3 views
4

Je dois valider le format d'une chaîne de date provenant d'un fichier csv. J'utilise l'analyseur csvReader (au.com.bytecode.opencsv.CSVReader). Ci-dessous le code que j'utilise pour obtenir les données du lecteur csv et le changer en un format de date.Validation du format de la date dans un contrôleur groovy

def String strToDate = csvrow[monatVal]

myDate = new Date().parse("dd.MM.yy HH:mm",strToDate)

Le problème est que dans le fichier CSV, il existe une entrée de date par exemple. '41 .01.10 12:22 ', j'ai ce qui suit quand j'imprime' myDate '

myDate = '10.02.10 12:22' -> Son ajoutant 10 jours au mois de février.

Je voudrais une vérification de validation pour le format de date. Y at-il un moyen de vérifier la dateString lors de l'analyse?

Merci à l'avance, Sudheer

Parse, il est probablement préférable comme une méthode statique, à savoir Date.parse (format, entrée), qui retourne une nouvelle instance de date - droit?

Répondre

7

La méthode que vous utilisez pour effectuer l'analyse de date est obsolète. Vous devriez utiliser DateFormat.parse() ou SimpleDateFormat.parse() à la place. Ces classes ont une méthode setLenient(boolean). Si vous définissez lenient à false, vous n'obtiendrez pas le 10 février lorsque vous analyserez 41.01, à la place, l'analyseur lancera une exception ParseException.

Exécutez le code suivant pour voir ce que je veux dire

def dateParser = new java.text.SimpleDateFormat("dd.MM.yy HH:mm") 

// If the next line is removed the date will be parsed to 10 February instead of 
// throwing a ParseException 
dateParser.lenient = false 

dateParser.parse('41.01.10 12:22') 
+0

Merci Don. Réglage de la clarté à false. Mais au lieu de donner un bon format, je donne quelque chose comme dateParser.parse ('41 .01.10 12:22:34 ') c'est ne pas reconnaître que le modèle de secondes n'est pas le modèle défini comme SimpleDateFormat. Comment puis-je vérifier cela? J'ai déjà essayé applypattern. Changement de dose beaucoup cependant. – sudheer

+0

Je ne suis pas sûr si SimpleDateFormat supporte cela. Peut-être que vous pourriez juste vérifier si la longueur de la chaîne de motif et la longueur de la chaîne de date sont les mêmes avant d'essayer d'analyser la chaîne de date –