输入年和周得到对应的,年月日,星期几,当前周,总周数,当前周标记
/// <summary>
/// 根据传过来的周找对应的年月日和星期几
/// </summary>
/// <param name="week"></param>
/// <returns></returns>
public static List<DateAndXQ> GetDateByWeek(int week, int year=0, int status = 0) //周,月,状态
{
//当前时间
var NowTime = DateTime.Now;
//当前周
GregorianCalendar gc = new GregorianCalendar();
int weekOfYear = gc.GetWeekOfYear(NowTime, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
List<DateAndXQ> datetime = new List<DateAndXQ>();
//获取当前的年份
var someTime = Convert.ToDateTime(status == 0 ? NowTime.ToString("yyyy-1-1") : NowTime.AddYears(1).ToString("yyyy-1-1"));
if (year!=0)
{
someTime = Convert.ToDateTime(year+"- 1 - 1");
}
//判断本年有多少周
int countDay = DateTime.Parse(someTime.Year + "-12-31").DayOfYear;
int countWeek = countDay / 7;
if (week > 0 && week <= countWeek)//做数据控制防止输错,造成数据混乱
{
int i = someTime.DayOfWeek - DayOfWeek.Monday;
if (i == -1) i = 6;// i值 > = 0 ,因为枚举原因,Sunday排在最前,此时Sunday-Monday=-1,必须+7=6。
TimeSpan ts = new TimeSpan(i, 0, 0, 0);
//获取第N周的星期一
someTime = someTime.Subtract(ts).AddDays((week - 1) * 7);
////获得星期几
//someTime = someTime.AddDays(day - 1);
var cnt = status == 1 ? 1 : 7;//如果是1则只查每周的开始结束时间
for (int x = 1; x <= cnt; x++)
{
DateAndXQ time = new DateAndXQ();
//获得星期几
time.Date = someTime.AddDays(x - 1).ToString("yyyy-MM-dd");
time.MinDate = someTime.AddDays(0).ToString("yyyy-MM-dd");
time.MaxDate = someTime.AddDays(6).ToString("yyyy-MM-dd");
//根据循环出的日期找出对应的月和天对应的星期
//转化为日期格式
var dates = Convert.ToDateTime(time.Date);
var years = dates.Year;
var month = dates.Month;
var day = dates.Day;
time.Week = CaculateWeekDay(years, month, day);
time.WeekCnt = countWeek;
time.WeekNow = week;
//当前周标记
time.WeekNowFlag = weekOfYear == week ? "T" : "F";
datetime.Add(time);
}
}
return datetime;
}
/// <summary>
/// 根据年月日获得星期几
/// </summary>
/// <param name="year"></param>
/// <param name="month"></param>
/// <param name="day"></param>
/// <returns></returns>
private static string CaculateWeekDay(int year, int month, int day)
{
string weekstr = string.Empty;
//把一月和二月看成是上一年的十三月和十四月
if (month == 1) { month = 13; year--; }
if (month == 2) { month = 14; year--; }
int week = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
switch (week)
{
case 0: weekstr = "星期一"; break;
case 1: weekstr = "星期二"; break;
case 2: weekstr = "星期三"; break;
case 3: weekstr = "星期四"; break;
case 4: weekstr = "星期五"; break;
case 5: weekstr = "星期六"; break;
case 6: weekstr = "星期日"; break;
}
return weekstr;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!