Я считаю, что это проблема номера недели по ISO ...
Если я использую этот код, адаптированный (и groovyfied) из вашего:
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"
Я получу diary47.shtml
возвращено
Как объясняет документация для GregorianCalendar , если вам нужны номера месяцев ISO:
Значения, рассчитанные для поля WEEK_OF_YEAR, варьируются от 1 до 53. Неделя 1 для годасамый ранний семидневный период, начинающийся с getFirstDayOfWeek (), который содержит как минимум getMinimalDaysInFirstWeek () дней с этого года.Таким образом, это зависит от значений getMinimalDaysInFirstWeek (), getFirstDayOfWeek () и дня недели 1 января. Недели между неделей 1 года и 1 неделей следующего года нумеруются последовательно от 2 до 52 или 53 (какнеобходимо).
Например, 1 января 1998 года был четверг. Если getFirstDayOfWeek () имеет значение MONDAY, а getMinimalDaysInFirstWeek () равно 4 (это значения, отражающие ISO 8601 и многие национальные стандарты), то первая неделя 1998 года начинается 29 декабря 1997 года и заканчивается 4 января 1998 года .Однако если getFirstDayOfWeek () имеет значение SUNDAY, то первая неделя 1998 года начинается 4 января 1998 года и заканчивается 10 января 1998 года;первые три дня 1998 года являются частью недели 53 1997 года.
Правка
Даже Groovier (из комментария Джона)
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
Просто запустил это на Windows с помощью VirtualBox и получил тот же результат