c# 计算当月第几周 算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 计算当月第几周 算法相关的知识,希望对你有一定的参考价值。

如2010-1-30号,怎么才能计算出他是第五周的第6天。谢谢!答案一经采纳另加5分。

参考技术A private void ShowWeek()

//目标日期
DateTime dt = new DateTime(2010, 1, 30);

//该年1月1日所在的周,定义为第一周,sunday为0,monday为1
DateTime dtFirst = new DateTime(dt.Year, 1, 1);

//目标日期距离第一天的天数
int daysCount = Convert.ToInt32((dt - dtFirst).TotalDays);

//将第一天的日期补齐
daysCount += Convert.ToInt32(dtFirst.DayOfWeek);

//目标日期所在的周
int weeksCount = daysCount / 7;

//目标日期所在的天
int dayIdx = Convert.ToInt32(dt.DayOfWeek);

//显示结果
MessageBox.Show("日期" + dt.ToShortDateString() + "是第" + (weeksCount + 1).ToString() + "周的第" + dayIdx.ToString() + "天。");

本回答被提问者采纳
参考技术B 有个方法可以直接得到
DateTime time = DateTime.Parse("2010-1-30");
time.DayOf();
然后还有很多方法,可以直接得到一个时间判断方面的东西
可以自己去试一下
参考技术C static void Main(string[] args)
//如何计算当前日期是本月的第几周?

//得到当前为这个月的第几天
int day = Convert.ToInt32(DateTime.Now.Day);
Console.WriteLine("当前是这个月的第" + day + "天");
//得到是当前年的哪一天
int yearday = Convert.ToInt32(DateTime.Now.DayOfYear);
Console.WriteLine(yearday);
//得到当前年
int year = Convert.ToInt32(DateTime.Now.Year);
Console.WriteLine(year);
//得到月份
int month = Convert.ToInt32(DateTime.Now.Month);
int totalDays = 0;
bool inRn;//是否为闰年
if (year % 4 == 0 && !(year % 100 == 0) || year % 400 == 0)

inRn = true;

else

inRn = false;//平年

for (int i = 1900; i < year; i++)

/* 判断闰年或平年,并进行天数累加 */
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
// 判断是否为闰年
totalDays = totalDays + 366; // 闰年366天

else

totalDays = totalDays + 365; // 平年365天


Console.WriteLine(totalDays);
int days = 0;
int beforeDays = 0;
for (int i = 1; i <= month; i++)

switch (i)

case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 2:
if (inRn)

days = 29;

else

days = 28;

break;
default:
days = 30;
break;

if (i < month)

beforeDays = beforeDays + days;



Console.WriteLine("此月份之前的天数" + beforeDays);
totalDays = totalDays + beforeDays; // 距离1900年1月1日的天数
int firstDayOfMonth; // 存储当月第一天是星期几:星期日为0
int temp = 1 + totalDays % 7; // 从1900年1月1日推算
if (temp == 7)
// 求当月第一天
firstDayOfMonth = 0; // 周日

else

firstDayOfMonth = temp;

Console.WriteLine("该月第一天是星期" + firstDayOfMonth);

参考技术D 经典问题,留个脚印。

c#中计算当前时间是今年第几周 与ORACLE数据库中ww转化相同

为了在程序中生成的当前时间是第几周的判断结果与ORCAL中的相同。因为在做周报 ,周报统计的数据计算周数是数据库算的,列表页面又是C#定时任务。

原有的C#计算当前时间是第几周的方法是这样的

    GregorianCalendar gc = new GregorianCalendar();
    int weekOfYear = gc.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstDay, DayOfWeek.Monday); 

C#中是这样计算:
2022年1月1号是周六 是第一周 weekOfYear =1
2022年1月3号是周一 是第二周 weekOfYear =2

数据库中是这样计算

to_char(sysdate, 'WW')
to_char(sysdate, 'IW')

注意在这里进行一下区分IW WW两种格式
IW:
IW是指的自然周的计算方法
例如:
sysdate=2022年1月1号
2022年1月1号是周六 to_char(sysdate, ‘IW’)= 0
2022年1月3号是周一 to_char(sysdate+3, ‘IW’) =1
那么对于数据库来说第一周其实是1月3号那一周,它是以第一个周一来当第一个完整周。可想而知前面几天就丢掉了。
WW:
指的是2022年1月1号是周六 那么1月1号算第一周 1月8号是第二周
2022年1月1号是周六 to_char(sysdate, ‘WW’)= 1
2022年1月3号是周一 to_char(sysdate+3, ‘WW’) =1
2022年1月3号是周一 to_char(sysdate+7, ‘WW’) =2

为了在C#中能计算出的周数与数据库相同于是这样写:

思路梳理 :首先算出今天是今年的第几天 (下文代码中的yearcountday ) 再用yearcountday 除 7 取整数+1 就能得到与数据库中WW算法相同的周数

           int yearcountday = 0;
            int week = 0;
            for (int i = 1; i <= DateTime.Now.Month; i++)
            
                string day = DateTime.Now.Year.ToString() + "-" + (i + 1).ToString() + "-01";
                DateTime dateTime = Convert.ToDateTime(day).AddDays(-1);
                if (i == DateTime.Now.Month)
                
                    dateTime = DateTime.Now;
                
     			//dateTime.Day代表这个月有多少天
                yearcountday += dateTime.Day;
                
            
            
            week =( yearcountday / 7) +1;

以上是关于c# 计算当月第几周 算法的主要内容,如果未能解决你的问题,请参考以下文章

在oracle中怎么计算当天是本月的第几周?

c#中计算当前时间是今年第几周 与ORACLE数据库中ww转化相同

c#中计算当前时间是今年第几周 与ORACLE数据库中ww转化相同

c#中计算当前时间是今年第几周 与ORACLE数据库中ww转化相同

C#中周,月,第几周,周开始结束时间de方法总结

C#获取时间属于第几周