代码改变世界

C#关于日期月天数和一年有多少周及某年某周时间段的计算

  观海看云  阅读(407)  评论(0编辑  收藏  举报

/// <summary>
        
/// 当前月有多少天
        
/// </summary>
        
/// <param name="y"></param>
        
/// <param name="m"></param>
        
/// <returns></returns>

        public static int HowMonthDay(int y, int m)
        
{
            
int mnext;
            
int ynext;
            
if (m < 12)
            
{
                mnext 
= m + 1;
                ynext 
= y;
            }

            
else
            
{
                mnext 
= 1;
                ynext 
= y + 1;
            }

            DateTime dt1 
= System.Convert.ToDateTime(y + "-" + m + "-1");
            DateTime dt2 
= System.Convert.ToDateTime(ynext + "-" + mnext + "-1");
            TimeSpan diff 
= dt2 - dt1;
            
return diff.Days;
        }


        
/// <summary>
        
/// 得到一年中的某周的起始日和截止日
        
/// 年 nYear
        
/// 周数 nNumWeek
        
/// 周始 out dtWeekStart
        
/// 周终 out dtWeekeEnd
        
/// </summary>
        
/// <param name="nYear"></param>
        
/// <param name="nNumWeek"></param>
        
/// <param name="dtWeekStart"></param>
        
/// <param name="dtWeekeEnd"></param>

        public static void GetWeek(int nYear, int nNumWeek, out   DateTime dtWeekStart, out   DateTime dtWeekeEnd)
        
{
            DateTime dt 
= new DateTime(nYear, 11);
            dt 
= dt + new TimeSpan((nNumWeek - 1* 7000);
            dtWeekStart 
= dt.AddDays(-(int)dt.DayOfWeek + (int)DayOfWeek.Monday);
            dtWeekeEnd 
= dt.AddDays((int)DayOfWeek.Saturday - (int)dt.DayOfWeek + 1);
        }


        
/// <summary>
        
/// 求某年有多少周
        
/// 返回 int
        
/// </summary>
        
/// <param name="strYear"></param>
        
/// <returns>int</returns>

        public static int GetYearWeekCount(int strYear)
        
{
            
string returnStr = "";

            System.DateTime fDt 
= DateTime.Parse(strYear.ToString() + "-01-01");
            
int k = Convert.ToInt32(fDt.DayOfWeek);//得到该年的第一天是周几 
            if (k == 1)
            
{
                
int countDay = fDt.AddYears(1).AddDays(-1).DayOfYear;
                
int countWeek = countDay / 7 + 1;
                
return countWeek;

            }

            
else
            
{
                
int countDay = fDt.AddYears(1).AddDays(-1).DayOfYear;
                
int countWeek = countDay / 7 + 2;
                
return countWeek;
            }


        }


        
/// <summary>
        
/// 求当前日期是一年的中第几周
        
/// </summary>
        
/// <param name="date"></param>
        
/// <returns></returns>

        public static int WeekOfYear(DateTime curDay)
        
{
            
int firstdayofweek = Convert.ToInt32(Convert.ToDateTime(curDay.Year.ToString() + "" + "1-1 ").DayOfWeek);

            
int days = curDay.DayOfYear;
            
int daysOutOneWeek = days - (7 - firstdayofweek);

            
if (daysOutOneWeek <= 0)
            
{
                
return 1;
            }

            
else
            
{
                
int weeks = daysOutOneWeek / 7;
                
if (daysOutOneWeek % 7 != 0)
                    weeks
++;

                
return weeks + 1;
            }

        }

 

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
点击右上角即可分享
微信分享提示