Эквивалент функции WeekDay VB6 в C#

В коде VB6 у меня есть следующее:

dim I as Long 

I = Weekday(Now, vbFriday) 

Я хочу эквивалент в С#. Кто-нибудь может помочь?


person RBS    schedule 30.12.2008    source источник


Ответы (4)


public static int Weekday(DateTime dt, DayOfWeek startOfWeek)
{
    return (dt.DayOfWeek - startOfWeek + 7) % 7;
}

Это можно вызвать с помощью:

DateTime dt = DateTime.Now;
Console.WriteLine(Weekday(dt, DayOfWeek.Friday));

Вышеуказанные результаты:

4

так как вторник через 4 дня после пятницы.

person LeppyR64    schedule 30.12.2008
comment
Возвращаемое значение функции VB6 (и VB.NET) основано на 1. return ((dt.DayOfWeek - startOfWeek + 7) % 7) + 1; - person 300hp; 19.09.2012

Вы имеете в виду свойство DateTime.DayOfWeek?

DayOfWeek dow = DateTime.Now.DayOfWeek;
person Lasse V. Karlsen    schedule 30.12.2008

Да, каждое значение DateTime имеет встроенное свойство DayOfWeek, которое возвращает перечисление с тем же именем...

DayOfWeek dow = DateTime.Now.DayOfWeek;

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

int dow = (int)(DateTime.Now.DayOfWeek);

Однако вам придется добавить константу от 1 до 6 и выполнить мод 7, чтобы перенастроить ее на другой день, кроме воскресенья...

person Charles Bretana    schedule 30.12.2008

Я не думаю, что есть эквивалент двухаргументной формы функции VB Weekday.

Вы можете эмулировать это, используя что-то вроде этого;

private static int Weekday(DateTime date, DayOfWeek startDay)
{
    int diff;
    DayOfWeek dow = date.DayOfWeek;
    diff = dow - startDay;
    if (diff < 0)
    {
        diff += 7;
    }
    return diff;
}

Затем назовите это так:

int i = Weekday(DateTime.Now, DayOfWeek.Friday);

Он возвращает 4 на сегодняшний день, так как вторник на 4 дня позже пятницы.

person Powerlord    schedule 30.12.2008