Как мне узнать дату пятницы, если сегодня понедельник? - PullRequest
3 голосов
/ 21 декабря 2011

У меня есть проект .Net, по какой-то причине мне нужна дата.

Я сделал как var date = DateTime.Today.AddDays(-1); который дает мне yesterday's дату. но если я запускаю свое приложение на Monday, тогда я должен получить Friday date

пожалуйста, предложите мне выражение для этого.

например. если сегодня Monday и дата 21/12/2001, это должно дать мне 19/12/2001 т.е. Fridays дата если сегодня Tuesday, а дата 21/12/2001, она должна вернуть мне 20/12/2001 как обычно

Ответы [ 6 ]

19 голосов
/ 21 декабря 2011
public DateTime GetPreviousWorkingDay(DateTime date)
{
    switch(date.DayOfWeek)
    {
        case DayOfWeek.Sunday:
            return date.AddDays(-2);
        case DayOfWeek.Monday:
            return date.AddDays(-3);
        default:
            return date.AddDays(-1);
    }
}
3 голосов
/ 21 декабря 2011

Это должно сработать:

var date = DateTime.Now.DayOfWeek == DayOfWeek.Monday ? DateTime.Today.AddDays(-3) : DateTime.Today.AddDays(-1);
2 голосов
/ 21 декабря 2011
//Check if the date is a sunday, if so deduct three days instead
if(date.DayOfWeek == DayOfWeek.Sunday) date = DateTime.Today.AddDays(-3)
0 голосов
/ 21 декабря 2011

Чтобы расширить ответ Рикса, если вам также нужно обрабатывать национальные праздники:

private Date[] _publicHolidays = { new Date(2011, 12, 25) };

public Date GetPreviousWorkingDay(Date date) 
{ 
    Date previousDay;

    switch(date.DayOfWeek) 
    { 
        case DayOfWeek.Sunday: 
            previousDay = date.AddDays(-2); 
        case DayOfWeek.Monday: 
            previousDay = date.AddDays(-3); 
        default: 
            previousDay = date.AddDays(-1); 
    } 

    if (_publicHolidays.Contains(previousDay))
   {
      return GetPreviousWorkingDay(previousDay);
   }
}  

Как вы заполняете свой список государственных праздников, действительно зависит от вас ...

0 голосов
/ 21 декабря 2011
        DateTime today = DateTime.Now;
        DateTime lastWorkingDay;
        if (today.DayOfWeek == DayOfWeek.Monday) 
        {
            lastWorkingDay = today.AddDays(-3);
        }
        else
        {
            lastWorkingDay = today.AddDays(-1);
        }

        Console.WriteLine(lastWorkingDay);
0 голосов
/ 21 декабря 2011

Предполагая, что вы хотите предыдущий рабочий день согласно моему комментарию выше:

    public static DateTime GetPreviousWorkingDay(DateTime fromDate)
    {
        while ((fromDate=(fromDate.Date - TimeSpan.FromDays(1))).DayOfWeek == DayOfWeek.Sunday | fromDate.DayOfWeek == DayOfWeek.Saturday)
        {}

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