Как получить даты начала и окончания с правильным временем для текущей недели в C #? - PullRequest
0 голосов
/ 03 июня 2018

Прежде чем пометить этот вопрос как дубликат, прочитайте далее .Я знаю, что этот вопрос задают много раз, но у меня есть дополнение к общей форме запроса, и мне не удалось найти правильный ответ относительно моего варианта использования.

У меня есть пара DateTime -объекты на случайное время между понедельником и пятницей (без субботы и воскресенья (!)).

Например:

2017-11-06 11:30:00.0000000 // Monday 6th November 2017
2017-11-07 13:30:00.0000000 // Tuesday 7th November 2017
2017-11-08 13:00:00.0000000 // Wednesday 8th November 2017
2017-11-09 15:00:00.0000000 // Thursday 9th November 2017
2017-11-10 16:00:00.0000000 // Friday 10th November 2017

Я бы хотел достичь DateTime понедельника и пятницы этой недели в 23: 59/00: 00 .

Вопрос ##

Итак, для всех упомянутых выше DateTime -объектов я бы хотел достичь понедельника во время старта и в пятницу:

2017-11-06 00:00:00.0000000 // Start: Monday 6th November 2017
2017-11-10 23:59:00.0000000 // Start: Friday 10th November 2017

Какой самый эффективный способ решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 03 июня 2018
private DateTime GetDay(DayOfWeek dayName, DateTime dt)
{
    if (dt.DayOfWeek == dayName)
            return dt;
        while (dt.DayOfWeek != dayName)
        {
            if (dayName == DayOfWeek.Monday)
                dt = dt.AddDays(-1);
            else
                dt = dt.AddDays(1);
        }
        return dt;
}

GetDay (DayOfWeek.Monday, Convert.ToDateTime ("2017-11-06 11: 30: 00.0000000"));

должен получить вас в понедельник этой недели.

GetDay (DayOfWeek.Friday, Convert.ToDateTime ("2017-11-06 11: 30: 00.0000000"));

должен получить пятницу этой недели.

Получив дату понедельника и пятницы, вы можете соответствующим образом изменить временную часть возвращаемого объекта DateTime.

0 голосов
/ 03 июня 2018

Как Дирк Шмидт ответил: Получить дату первого и последнего дня недели, зная номер недели

public static DateTime FirstDayOfWeek(DateTime date)
{
    DayOfWeek firstDayOfWeek= CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
    int offset = firstDayOfWeek - date.DayOfWeek;

    return date.AddDays(offset);
}

public static DateTime LastDayOfWeek(DateTime date)
{
    return FirstDayOfWeek(date).AddDays(4);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...