Найдите, на какой неделе данное datetime попадает в диапазон datetime - PullRequest
0 голосов
/ 03 августа 2020

Предположим, если у меня есть диапазон дат и времени от: 2020-07-01 08:00 до 2020-07-21 10:25

, мне нужно проверить, в какой номер недели падает дата ввода. День недели - это день, в котором d1.

DateTime d1 =
DateTime.ParseExact("2020-07-01 08:00", "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
DateTime d2 =
DateTime.ParseExact("2020-07-21 10:25", "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);

List<int> weeks = new List<int>();
var Week = (int)Math.Floor((double)d1.DayOfYear / 7.0); //starting week number
for (DateTime t = d1; t < d2; t = t.AddDays(7))
{
    weeks.Add(Week);
    Week++;
}

Здесь будут использоваться три даты, d1 и d2 - это диапазон дат, они постоянны по умолчанию, мы не можем их изменять.

Но нам нужно найти номер недели только для третьей даты, которая будет только вводиться.

Пример: если я передаю ввод как:

Example 1: If input as `2020-07-03 08:00` the output should be returned as: Week 1
Example 2: If input as `2020-07-08 09:35` the output should be returned as: Week 2

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

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

Calendar.GetWeekOfYear

Итак, чтобы решить вашу проблему:

Calendar.GetWeekOfYear(d3) - Calendar.GetWeekOfYear(d1)

Вам нужно будет убедиться, что d3 находится в диапазоне дат для целей проверки

0 голосов
/ 03 августа 2020

Вы можете использовать поиск разницы в днях и использовать простой лог c для печати. См. Ниже код, который распечатывает все недели, как вы задали в своем вопросе:

DateTime d1 = DateTime.ParseExact("2020-06-28 19:41:00", "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
        DateTime d2 = DateTime.ParseExact("2020-08-03 22:00:00", "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
        
        int diffDay = (d2 - d1).Days;
        int currentWeek = 0;
        while (currentWeek < diffDay)
        {
            var week = (currentWeek / 7) + 1;
            Console.WriteLine("Week" + week);
            currentWeek = currentWeek + 7;
        }

Чтобы распечатать только неделю, на которую будет приходиться дата

var week = $"week {((d2 - d1).Days / 7) + 1}";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...