2016-12-16 4 views
0

Как вы рассчитываете количество недель между двумя датами ISO8601, используя только номер недели и года?Количество недель между двумя датами iso8601

Вход: год1 week1 YEAR2 week2

Выход: Количество недель в соответствии с ISO8601

Я могу рассчитать количество недель в году:

public static int AmountOfWeeksInYearIso8601(this DateTime dateTime) 
{ 
    var year = dateTime.Year; 
    var g = Math.Floor((year - 100d)/400d) - Math.Floor((year - 102d)/400d); 
    var h = Math.Floor((year - 200d)/400d) - Math.Floor((year - 199d)/400d); 
    var f = 5 * year + 12 - 4 * (Math.Floor(year/100d) - Math.Floor(year/400d)) + g + h; 

    return f % 28 < 5 ? 53 : 52; 
} 
+1

Это немного запутанно, поскольку номер недели и год не составляют дату - можете ли вы уточнить свой вопрос немного больше? – stuartd

+2

@stuartd «позволяющий годам» достаточно, чтобы сделать это нетривиальным: он требует выяснить, какие годы имеют 52 недели и которые имеют 53. – hvd

+0

@stuartd В нумерации по ИД, которая может упасть на неделю 1 следующего год. – hvd

ответ

4

Создать DateTime значений, соответствующих понедельникам двух недель. См. Calculate date from week number, как это сделать. Вычтите их, чтобы получить разницу как TimeSpan. Запрашивайте свой объект Days, чтобы узнать о различите в течение дня. Разделите на 7, чтобы получить разницу в течение нескольких недель.

+0

Кажется, это работает! Благодарю. – Barsonax

+0

КПП. это также определенно быстрее, чем итерация в большинстве случаев. Проверка 'year% 400' на хешсет, как предлагается в http://stackoverflow.com/a/8724110/1336590, немного быстрее для различий менее 30 лет. После этого итерация происходит медленнее и медленнее, хотя это, как представляется, имеет постоянное время выполнения. – Corak

 Смежные вопросы

  • Нет связанных вопросов^_^