C# 获取当前年月日星期第几周等信息

本来有一个需求,需获取当前时间是本年度的第几周。

1. 获取当前日期年月日

简单的使用属性即可

var dt = DateTime.Now;

Console.WriteLine("年:" + dt.Year);

Console.WriteLine("月: " + dt.Month);

Console.WriteLine("日:" + dt.Day);

输出:

年:2022

月: 9

日:1


2. 获取当前星期几

获取英文星期几

var wk = dt.DayOfWeek;

Console.WriteLine("星期:" + wk);

输出:

星期:Thursday


获取星期几用数字表示

int k = (int)DateTime.Now.DayOfWeek;//获取当前时间

Console.WriteLine("星期:" + k);

输出:

星期:4


将星期几转换为中文

string[] weekdays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };

string wkCN = weekdays[Convert.ToInt32(DateTime.Now.DayOfWeek)];

Console.WriteLine("星期:" + wkCN);

输出:

星期:星期四


3. 获取当前时间是第几周

方式1:使用总天数除以7

        public static string GetTheWeekNum()

        {

            // 获取当年1月1日的 时间

            DateTime dateTime = new DateTime(DateTime.Now.Year, 1, 1);

            //获取当前时间 与第一天的 天数

            int dayCount = (int)(DateTime.Now - dateTime).TotalDays;

            //目标日期距离该年第一周第一天的天数(sunday为0,monday为1)

            dayCount += Convert.ToInt32(dateTime.DayOfWeek);

            //获取大于或等于最小整数

            return Math.Ceiling(dayCount / 7.0).ToString();

        }

Console.WriteLine("第" + GetWeekIndexByYear(dt) + " 周");

输出:

第36 周


方式2:直接使用系统公历对象

    public static string GetTheWeekNum2()

        {

            //创建公历日历对象

            GregorianCalendar gregorianCalendar = new GregorianCalendar();

            //获取指定日期是周数 CalendarWeekRule指定 第一周开始于该年的第一天,DayOfWeek指定每周第一天是星期几

            int weekOfYear = gregorianCalendar.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstDay, DayOfWeek.Monday);

            return weekOfYear.ToString();

        }

输出:

第36 周


方式3:

        public static int GetWeekIndexByYear(DateTime dt)

        {

            //当前时间当年的第一天

            DateTime time = Convert.ToDateTime(dt.ToString("yyyy") + "-01-01");

            TimeSpan ts = dt - time;

            //当年第一天是星期几

            int firstDayOfWeek = (int)time.DayOfWeek;

            //获取当前时间已过的总天数(四舍五入)

            int day = int.Parse(ts.TotalDays.ToString("F0")) + 1;

            //今年第一天星期日

            if (firstDayOfWeek == 0)

            {

                day--;     //总天数减1

            }

            else

            {

                day = day - (7 - firstDayOfWeek + 1);   //减去第一周的天数

            }

            int thisDayOfWeek = (int)dt.DayOfWeek;  //当前日期的星期

            if (thisDayOfWeek == 0)       //星期日直接减7天

            {

                day = day - 7;

            }

            else

            {

                day = day - thisDayOfWeek;

            }

            //第一个星期完整的7天+ 当前时间这个星期的7天 除以7

            int week = (day + 7 + 7) / 7;

            return week;

        }


输出:

第36 周

第2种方式简便,结果都相同。

你可能感兴趣的:(C# 获取当前年月日星期第几周等信息)