C#日历问题,帮我看看这个错在哪,1900年1月是对的,2011年11月显示是错的

随枫而来 2011-11-08 11:26:26

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication8
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("*******");
Console.Write("\n year");
int year = int.Parse(Console.ReadLine());
Console.Write("\n month");
int month = int.Parse(Console.ReadLine());
int days = 0;
Boolean isRn;
if ( (year %4 == 0 && year%100 != 0) || (year%400 == 0))
{
isRn = true;


}
else { isRn = false; }
int totaldays = 0;
for (int i = 1900; i <year; i++)
{
if (year % 4 == 0 && !(year % 100 == 0) || year % 400 == 0)
{
totaldays = totaldays + 366;

}
else { totaldays = totaldays + 365; }
}
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(isRn)
{

days=29;

}
else {days=28;}
break;
default:
days=30;
break;
}
if (i < month) {
beforedays = beforedays + days;


}
}
totaldays = totaldays + beforedays;
int firsdayofmonth; //存储当月第一天是星期几,周日是0,周一到周六1-6
int temp = 1+totaldays % 7;

if (temp == 7)
{
firsdayofmonth = 0;


}
else { firsdayofmonth = temp; }

Console.WriteLine("星期日\t星期一\t星期二\t星期3\t星期4\t星期5\t星期6");
for (int nullno = 0; nullno < firsdayofmonth; nullno++) {

Console.Write("\t");



}
for (int i = 1; i <= days; i++) {
Console.Write(i + "\t");
if ((totaldays + i -1) % 7 == 5) //当天为周六换行输出
{

Console.WriteLine();


}







}
}


}
}


...全文
166 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿非 2011-11-09
  • 打赏
  • 举报
回复

static void Main(string[] args)
{
Console.WriteLine("*******");
Console.Write("\n year");
int year = int.Parse(Console.ReadLine());
Console.Write("\n month");
int month = int.Parse(Console.ReadLine());

DateTime dt = new DateTime(year, month, 1);

int firsdayofmonth; //存储当月第一天是星期几,周日是0,周一到周六1-6
firsdayofmonth = (int)dt.DayOfWeek;

int days = (dt.AddMonths(1) - dt).Days;

Console.WriteLine("星期日\t星期一\t星期二\t星期3\t星期4\t星期5\t星期6");

for (int nullno = 0; nullno < firsdayofmonth; nullno++)
{
Console.Write("\t");
}
for (int i = 1; i <= days; i++)
{
Console.Write(i + "\t");
if (i % 7 == 5) //当天为周六换行输出
{
Console.WriteLine();
}
}
}
随枫而来 2011-11-09
  • 打赏
  • 举报
回复
我自己搞明白了,谢谢两位的大力帮助!
随枫而来 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 sandy945 的回复:]
if ((i + firsdayofmonth - 1) % 7 == 6) //当天为周六换行输出

dt.AddMonths
[/Quote]
这个+firsdayofmonth - 1有点不太懂大神说的详细点吧,还有
int days = (dt.AddMonths(1) - dt).Days; (dt.AddMonths(1) - dt).Days;看的不太懂。麻烦说下,谢谢!
这个月一共有多少天
阿非 2011-11-09
  • 打赏
  • 举报
回复
dt.AddMonths
阿非 2011-11-09
  • 打赏
  • 举报
回复

for (int i = 1; i <= days; i++)
{
Console.Write(i + "\t");
if ((i + firsdayofmonth - 1) % 7 == 6) //当天为周六换行输出
{
Console.WriteLine();
}
}
随枫而来 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sandy945 的回复:]

new DateTime(year, month, 1);
这个月的第一天

firsdayofmonth = (int)dt.DayOfWeek;
这天是星期几

int days = (dt.AddMonths(1) - dt).Days;
这个月一共有多少天
[/Quote]
(dt.AddMonths(1) - dt).Days 是什么意思,这个dt.AddMonths(1)是加一天,那么 - dt.day是什么意思,麻烦说下,对C#的DATATIME,用的不太多。
随枫而来 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 juliohuang 的回复:]

看的太辛苦用我的吧。
[/Quote]
谢谢,关键语句能解释下吗?
var dateTime = new DateTime(year, month, 1);
for (int i = week; i < (dateTime.AddMonths(1)-dateTime).Days+week; i++)
{
Console.Write((i-week+1) + "\t");
if ( i% 7 == 6)
{
Console.WriteLine();
}
}
随枫而来 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sandy945 的回复:]

C# code

static void Main(string[] args)
{
Console.WriteLine("*******");
Console.Write("\n year");
int year = int.Parse(Console.ReadLine());
……
[/Quote]
2012年1月 ,显示异常。周六判断有问题
阿非 2011-11-09
  • 打赏
  • 举报
回复
new DateTime(year, month, 1);
这个月的第一天

firsdayofmonth = (int)dt.DayOfWeek;
这天是星期几

int days = (dt.AddMonths(1) - dt).Days;
这个月一共有多少天
随枫而来 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sandy945 的回复:]

C# code

DateTime dt = new DateTime(year, month, 1); //解释下。
firsdayofmonth = (int)dt.DayOfWeek; // 这个月第一天是星期几?
int days = (dt.AddMonths(1) - dt).Days; //解释下。
……
[/Quote]
DateTime dt = new DateTime(year, month, 1); //解释下。
firsdayofmonth = (int)dt.DayOfWeek; // 这个月第一天是星期几?
int days = (dt.AddMonths(1) - dt).Days; //解释下。
DENQH 2011-11-08
  • 打赏
  • 举报
回复
你输出year 看是什么?
黄亮 2011-11-08
  • 打赏
  • 举报
回复
看的太辛苦用我的吧。
黄亮 2011-11-08
  • 打赏
  • 举报
回复
  Console.WriteLine("*******");
Console.Write("\n year");
int year = int.Parse(Console.ReadLine());
Console.Write("\n month");
int month = int.Parse(Console.ReadLine());

var dateTime = new DateTime(year, month, 1);
Console.WriteLine("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
var week = (int)dateTime.DayOfWeek;
for (int nullno = 0; nullno < week; nullno++)
{
Console.Write("\t");
}
for (int i = week; i < (dateTime.AddMonths(1)-dateTime).Days+week; i++)
{
Console.Write((i-week+1) + "\t");
if ( i% 7 == 6)
{
Console.WriteLine();
}
}
随枫而来 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 denqh 的回复:]

Console.Write("\n year");
int year = int.Parse(Console.ReadLine());
Console.Write("\n month");
int month = int.Parse(Console.ReadLine());
不是数字字符能转为int ?所以for只……
[/Quote]
?现在是1901年也是正确的,这个字符转不转没多大关系吧。。。
DENQH 2011-11-08
  • 打赏
  • 举报
回复
Console.Write("\n year");
int year = int.Parse(Console.ReadLine());
Console.Write("\n month");
int month = int.Parse(Console.ReadLine());
不是数字字符能转为int ?所以for只一次1900
随枫而来 2011-11-08
  • 打赏
  • 举报
回复
if ((totaldays + i -1) % 7 == 5) //当天为周六换行输出
为什么这样写看不懂。
随枫而来 2011-11-08
  • 打赏
  • 举报
回复
http://wenku.baidu.com/view/9293a103b52acfc789ebc952.html 百度文库的地址,有注释

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧