本来有一个需求,需获取当前时间是本年度的第几周。
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种方式简便,结果都相同。