Mac Dayofweek проблема - PullRequest
       10

Mac Dayofweek проблема

0 голосов
/ 25 ноября 2010

Кто-нибудь знает, почему следующий код работает правильно на Windows, а не на Mac ??Сегодня (24/11/2010) должно вернуться 47, а не 48 согласно MacOS

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'

1 Ответ

1 голос
/ 25 ноября 2010

Я считаю, что это проблема номера недели по 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 и получил тот же результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...