Je crois qu'il est un problème de numéro de semaine ...
Si j'utilise ce code adapté (et groovyfied) de vôtre:
import java.text.SimpleDateFormat
def fm_date = '24/11/2010'
Calendar.getInstance().with { cal ->
// We want ISO Week numbers
cal.firstDayOfWeek = MONDAY
cal.minimalDaysInFirstWeek = 4
setTime new SimpleDateFormat('dd/MM/yyyy').parse(fm_date)
now = cal[ WEEK_OF_YEAR ]
}
"diary${"$now".padLeft(2, '0')}.shtml"
Je reçois diary47.shtml
retourné
Comme l'explique documentation for GregorianCalendar, si vous souhaitez que les numéros ISO Mois:
Les valeurs calculées pour la WEEK_OF_YEAR domaine vont de 1 à 53. Semaine 1 pour une année est la première période de sept jours à partir du getFirstDayOfWeek() qui contient au moins jours getMinimalDaysInFirstWeek() de que an. Il dépend donc des valeurs de getMinimalDaysInFirstWeek(), getFirstDayOfWeek(), et le jour de la semaine du 1. Janvier semaines entre semaine 1 d'un an et la semaine 1 de la année suivante sont numérotés de manière séquentielle à partir 2 à 52 ou 53 (comme nécessaire).
Par exemple, le 1er janvier 1998 était un jeudi. Si getFirstDayOfWeek() est lundi et getMinimalDaysInFirstWeek() est 4 (ce sont les valeurs qui reflètent ISO 8601 et de nombreuses normes nationales), puis la semaine 1 de 1998 débute le 29 Décembre, 1997 et se termine le 4 Janvier, 1998. Si, cependant, getFirstDayOfWeek() est DIMANCHE, alors la semaine 1 de 1998 commence le le 4 janvier 1998 et se termine le janvier 10, 1998; les trois premiers jours de 1998 puis font partie de la semaine 53 de 1997.
Modifier
Même groovy (du commentaire de John)
def fm_date = '24/11/2010'
Calendar.getInstance().with { cal ->
// We want ISO Week numbers
cal.firstDayOfWeek = MONDAY
cal.minimalDaysInFirstWeek = 4
cal.time = Date.parse('dd/MM/yyyy', fm_date)
now = cal[ WEEK_OF_YEAR ]
}
"diary${"$now".padLeft(2, '0')}.shtml"
Edit2
Juste a couru ceci sur Windows en utilisant VirtualBox, et a obtenu le même résultat
Thats fabuleux ... Un peu plus grooviness ci-dessous en prenant le format de date simple .. Toujours pas sûr pourquoi le cal.get (Calendar.WEEK_OF_YEAR) calcule différemment sur mac et PC qui est où le problème semble être .... –
def fm_date = '24/11/2010' Calendar.getInstance().with { cal -> // We want ISO Week numbers cal.firstDayOfWeek = MONDAY cal.minimalDaysInFirstWeek = 4 cal.setTime(Date.parse('dd/MM/yyyy', fm_date)) now = cal[ WEEK_OF_YEAR ] } "diary${"$now".padLeft(2, '0')}.shtml"
–Est-ce que ce code fonctionne différemment sur un Mac et Windows? Je soupçonne qu'il pourrait être différentes valeurs initiales pour firstDayOfWeek et minimalDaysInFirstWeek sur les deux plates-formes ... Je reçois 'diary47.shtml' sur un Mac (mais ne peut pas tester Windows): -/ –