`
yaasshole
  • 浏览: 665485 次
文章分类
社区版块
存档分类
最新评论

日期

 
阅读更多
日期和字符串一样,都不能改变自身的值
1System.DateTimed=System.DateTime.Now;
2System.Console.WriteLine(d.AddDays(1));
3System.Console.WriteLine(d.AddHours(1));
4System.Console.WriteLine(d.AddMilliseconds(1));
5System.Console.WriteLine(d.AddMinutes(1));
6System.Console.WriteLine(d.AddMonths(1));
7System.Console.WriteLine(d.AddYears(1));
8System.Console.WriteLine(d);//d没有改变值
9d=d.AddYears(1);//需要重新赋值

一些关于日期的算法要牢记

1System.Console.WriteLine(d.AddDays(-(d.Day-1)));//本月第一天
2System.Console.WriteLine(d.AddDays(-d.Day));//上月最后一天
3System.Console.WriteLine(d.AddDays(-(int)d.DayOfWeek));//本周第一天

ok,我们来看一个例子:

1System.DateTimedt=newSystem.DateTime(1949,10,1);
2System.Console.WriteLine(dt.ToLongDateString());
3System.DateTimed=System.DateTime.Now;
4inttoDay=d.Day;
5intthisMonth=d.Month;
6System.Console.WriteLine("当前日期:{0}",d.Date);
7d=d.AddDays(-(toDay-1));
8System.Console.WriteLine("该月第一天:{0}",d.Date);
9
10do
11{
12stringtoDayFlag="";
13if(d.Day==toDay)
14{
15toDayFlag="*";
16}

17System.Console.WriteLine("{0}:{1}{2}",d.Day,d.DayOfWeek,toDayFlag);
18d=d.AddDays(1);
19}

20while(d.Month==thisMonth);

上面例子输出本月的所有日期和星期,并在当日标注*

那么开始巩固知识:

设一企业合同约定每月5号发工资,请输出该企业今年实际每月发工资的日期(若5号是周六或周日,则工资提前到周五发)

1System.DateTimedt=System.DateTime.Now;
2dt=dt.AddDays(-(dt.DayOfYear-1));
3System.Console.WriteLine("该年第一天:{0}",dt.Date);
4dt=dt.AddDays(4);
5intiDay=0;
6System.Console.WriteLine("定位到第一个月的5号:{0}",dt.Date);
7do
8{
9if(dt.Month!=5&&dt.Month!=10)
10{
11if(dt.DayOfWeek==System.DayOfWeek.Saturday)
12{iDay=-1;}
13if(dt.DayOfWeek==System.DayOfWeek.Sunday)
14{iDay=-2;}
15}

16else
17{iDay=-5;}
18System.Console.WriteLine("{0}月的发薪水日期是{1}",
19dt.Month,dt.AddDays(iDay).Date);
20dt=dt.AddMonths(1);
21iDay=0;
22}

23while(dt.Year==System.DateTime.Now.Year);


设每年9.1开学,若9.1不是星期一,则要求开学日期改为9月的第一个星期一,请输出从1980-2004年的每年开学日期

1//方案1
2System.DateTimedt=newSystem.DateTime(1949,9,1);
3System.DateTimetmpdt;
4do
5{
6if(dt.DayOfWeek==System.DayOfWeek.Monday)
7{tmpdt=dt;}
8else
9{
10if(dt.DayOfWeek==System.DayOfWeek.Sunday)
11{tmpdt=dt.AddDays(1);}
12else
13{tmpdt=dt.AddDays(7-(int)dt.DayOfWeek+1);}
14}

15System.Console.WriteLine("{0}年的9.1是{1}",dt.Year,dt.DayOfWeek);
16System.Console.WriteLine("所以实际开学日期是:{0}",tmpdt.Date);
17System.Console.WriteLine("------------------------");
18dt=dt.AddYears(1);
19}

20while(dt.Year<=System.DateTime.Now.Year);
21
22
23//方案2
24System.DateTimedt=newSystem.DateTime(1949,9,1);
25System.DateTimetmpdt;
26do
27{
28if((int)dt.DayOfWeek<2)
29{tmpdt=dt.AddDays(1-(int)dt.DayOfWeek);}
30else
31{
32tmpdt=dt.AddDays(7-(int)dt.DayOfWeek+1);
33}

34System.Console.WriteLine("{0}年的9.1是{1}",dt.Year,(int)dt.DayOfWeek);
35System.Console.WriteLine("所以实际开学日期是:{0}",tmpdt.Date);
36System.Console.WriteLine("------------------------");
37dt=dt.AddYears(1);
38}

39while(dt.Year<=System.DateTime.Now.Year);

注意方案2的第29行,使用了01互换的方法,简化了周日和周一的计算


计算给定日期的年的每个月的周数

1System.DateTimetmpdt=newDateTime(year,1,1);
2inttmpMonth=tmpdt.Month;//记录当前月
3int[]weeks=newint[12];//每个元素存放每月的星期数量
4do
5{
6do
7{//如果是周六就加1
8if(tmpdt.DayOfWeek==System.DayOfWeek.Saturday)
9{
10weeks[tmpMonth-1]=weeks[tmpMonth-1]+1;
11}

12tmpdt=tmpdt.AddDays(1);//下一天
13}

14while(tmpdt.Month==tmpMonth);//月循环
15if(tmpdt.Day==1&&tmpdt.DayOfWeek!=System.DayOfWeek.Sunday)
16{//如果每月的第一天不是周日,则上月再加一周
17weeks[tmpMonth-1]=weeks[tmpMonth-1]+1;
18}

19tmpMonth=tmpdt.Month;
20}

21while(tmpdt.Year==year);//年循环
22for(inti=0;i<=weeks.Length-1;i++)
23{
24System.Console.WriteLine("{0}年{1}月有{2}周",year,i+1,weeks[i]);
25}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics