Get the number of the current weekday in ASP.NET Core

Viewed 204

I need to get the current weekday number of the current week.

If I use DateTime.Now.DayOfWeek I get Monday, but it would be much easier to work with if I get 1 for Monday, 7 for Sunday etc. Thanks beforehand!

3 Answers

You can use this:

day1 = (int)DateTime.Now.DayOfWeek;

You can create an extension method to hide the implementation details.

Using an extension method and constraining T to IConvertible does the trick, but as of C# 7.3 Enum is an available constraint type:

public static class EnumExtensions
{
    public static int ToInt<T>(this T source) where T : Enum
    {
        return (int) (IConvertible) source;
    }
}

This then allows you to write:

DateTime.Now.DayOfWeek.ToInt();

Example:

Console.WriteLine(DayOfWeek.Monday.ToInt()); // outputs 1

Note: this solution assumes that int is used as the underlying Enum type.

DateTime.Now.DayOfWeek is an enum, and it is of (int) type, so the easiest way would be @faheem999 's answer. But, if you are dealing with Enums with unknown type's, such as (byte , sbyte , short , ushort , int , uint , long or ulong), then either you need to know Enum type, or use another method:

DayOfWeek dayOfWeek = DateTime.Now.DayOfWeek;
object val = Convert.ChangeType(dayOfWeek, dayOfWeek.GetTypeCode());

For more information, look at this question Get int value from enum in C#

Related