Author: bpoussin Date: 2013-04-15 12:05:24 +0200 (Mon, 15 Apr 2013) New Revision: 1566 Url: http://nuiton.org/projects/wikitty/repository/revisions/1566 Log: fix date parsing when pattern contains ' to escape char Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2013-04-03 20:44:50 UTC (rev 1565) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2013-04-15 10:05:24 UTC (rev 1566) @@ -112,8 +112,8 @@ public static final String DEFAULT_MAJOR_VERSION_PREFIX = DEFAULT_MAJOR_VERSION + "."; public static final String DEFAULT_VERSION = DEFAULT_MAJOR_VERSION_PREFIX + DEFAULT_MINOR_VERSION; - public static final String DATE_NOW = "now"; - public static final String DATE_TODAY = "today"; + public static final String DATE_NOW = "NOW"; + public static final String DATE_TODAY = "TODAY"; public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ'Z'"; @@ -679,9 +679,18 @@ * Date et Calendar sont directement supporte, tous les autres types sont * transformer en String et parser pour construire la Date. * - * <li>Si la chaine est 'now', la date courante est utilisee avec l'heure courant - * <li>Si la chaine est 'today', la date courante est utilisee avec l'heure a 0 + * <li>Si la chaine est 'NOW', la date courante est utilisee avec l'heure courant + * <li>Si la chaine est 'TODAY', la date courante est utilisee avec l'heure a 0 * + * L'implantation de cette methode n'est pas satisfaisante, il faudrait + * trouver un meilleur algo. Le but est de parser la date suivant different + * pattern, puis derrière cette date il peut y avoir des demandes de modification + * (math date) par exemple +3MONTHS. Pour qu'une date soit valide, il faut + * que le parsing de la date fonctionne et que le parsing de la partie math + * fonctionne. Mais le découpage des deux parties n'est pas simple a trouver + * vu que la date peut-etre dans de tres nombreux format et que la partie + * math peut-etre elle aussi complexe :( + * * @param value * @return */ @@ -704,7 +713,8 @@ v = StringUtils.substringAfter(v, DATE_TODAY); } else { for (String pattern : DATE_FORMAT_ALLOWED) { - if (StringUtils.length(v) < StringUtils.length(pattern)) { + // remove ' from pattern because 'T' is 3 char in patten and 1 in value + if (StringUtils.length(v) < StringUtils.length(StringUtils.remove(pattern, "'"))) { // if pattern longer than v then parse is impossble continue; }