Ошибка количества недель при использовании библиотеки TimePeriod (CodeProject) - PullRequest
1 голос
/ 20 января 2012

Я просто пытаюсь использовать эту TimePeriod библиотеку. Я только что нашел что-то, что я не уверен, что это правильно, но я не могу пометить это как ошибку. Просто нужно разъяснение.

Dim xDateDiff As New DateDiff(New Date(2011, 1, 1), New Date(2011, 2, 1))
Console.WriteLine("Week Count : " + xDateDiff.Weeks().ToString()

Теперь количество недель выводит 5, где, как вы видите, если вы видите григорианский календарь, 6 недель между двумя датами. Количество недель начинается с нуля? Это то, что беспокоит меня.

Пожалуйста, помогите.

Ответы [ 3 ]

1 голос
/ 24 января 2012

Я никогда не пользовался библиотекой TimePeriod, но разве между двумя датами разница в 5 недель, а если включить первую неделю, то есть 6 недель? Я хочу сказать, ты не мог просто сделать xDateDiff.Weeks() + 1?

1 голос
/ 29 января 2012

Класс DateDiff был разработан для представления дружественных для интерфейса различий двух дат. Свойство Week учитывает только полные недели.

В случае подсчета количества недель между двумя датами вы можете использовать следующий код:

// ----------------------------------------------------------------------
public void InvolvedWeekCount()
{
  Console.WriteLine( "Involved week count: " +
    CalcInvolvedWeekCount( new DateTime( 2011, 1, 1 ), new DateTime( 2011, 1, 2 ), DayOfWeek.Sunday ) );
  // > Involved week count: 2
  Console.WriteLine( "Involved week count: " +
    CalcInvolvedWeekCount( new DateTime( 2011, 1, 2 ), new DateTime( 2011, 1, 8 ), DayOfWeek.Sunday ) );
  // > Involved week count: 1
  Console.WriteLine( "Involved week count: " +
    CalcInvolvedWeekCount( new DateTime( 2011, 1, 1 ), new DateTime( 2011, 1, 29 ), DayOfWeek.Sunday ) );
  // > Involved week count: 5
  Console.WriteLine( "Involved week count: " +
    CalcInvolvedWeekCount( new DateTime( 2011, 1, 1 ), new DateTime( 2011, 1, 30 ), DayOfWeek.Sunday ) );
  // > Involved week count: 6
  Console.WriteLine( "Involved week count: " +
    CalcInvolvedWeekCount( new DateTime( 2011, 1, 1 ), new DateTime( 2011, 2, 1 ), DayOfWeek.Sunday ) );
  // > Involved week count: 6
} // InvolvedWeekCount

// ----------------------------------------------------------------------
private int CalcInvolvedWeekCount( DateTime date1, DateTime date2, DayOfWeek firstDayOfWeek )
{
  if ( date1.Date.Equals( date2.Date ) )
  {
    return 0;
  }

  DateTime startWeek = TimeTool.GetStartOfWeek( date1, firstDayOfWeek );
  DateTime endWeek = TimeTool.GetStartOfWeek( date2, firstDayOfWeek ).AddDays( TimeSpec.DaysPerWeek );

  return (int)( endWeek.Subtract( startWeek ).TotalDays / TimeSpec.DaysPerWeek );
} // CalcInvolvedWeekCount
0 голосов
/ 20 января 2012

Ваш вопрос предполагает ложь. 1 февраля наступает через 31 день после 1 января. 31/7 составляет чуть меньше четырех с половиной, поэтому 1 февраля приходится на пятую неделю после 1 января. Как вы получаете 6 в качестве ожидаемого ответа?

...