2010-11-25 4 views
0

Quelqu'un pourrait-il savoir pourquoi le code suivant fonctionne correctement sur Windows et non sur Mac ?? Aujourd'hui (24/11/2010) devrait revenir 47 pas 48 comme par MacOSMac dayofweek question

def fm_date = '24/11/2010' 

import java.text.SimpleDateFormat 

def lPad = {it -> 
st = '00' + it.toString() 
return st.substring(st.length()-2, st.length()) 
} 

dfm = new SimpleDateFormat("dd/MM/yyyy") 
cal=Calendar.getInstance() 
cal.setTime(dfm.parse(fm_date)) 
now = cal.get(Calendar.WEEK_OF_YEAR) 
cal.add(Calendar.DAY_OF_MONTH,-7) 
prev = cal.get(Calendar.WEEK_OF_YEAR) 
cal.add(Calendar.DAY_OF_MONTH,14) 
next = cal.get(Calendar.WEEK_OF_YEAR) 
prev = 'diary' + lPad(prev) + '.shtml' 
next = 'diary' + lPad(next) + '.shtml' 
return 'diary' + lPad(now) + '.shtml' 

Répondre

1

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

+0

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 .... –

+0

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"

+0

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): -/ –