
关于计算出一年的第一天是星期几?
publicstaticlongfirstDayOfYear(inty){longn;n=y*365;//这句让我很费解....万一输入的年份是闰年怎么办?for(i=1...
public static long firstDayOfYear(int y)
{
long n;
n=y*365; // 这句让我很费解....万一输入的年份是闰年怎么办?
for(i=1;i<y;i++)
{
if(isLeapYear(i)) n+=1;
}
return n%=7;
}
/***判断是不是闰年*/
public static boolean isLeapYear(int y)
{
return ((y%4==0 && y %100!=0) || y%400==0);
}
//======================修改后的程序=========================================
public static long firstDayOfYear(int y)
{
long n;
// n=y*365; // 这句让我很费解....万一输入的年份是闰年怎么办?
if(isLeapYear(y))
{
n=y*365+1;
}
else
{
n=y*365;
}
for(i=1;i<y;i++)
{
if(isLeapYear(i)) n+=1;
}
return n%=7;
}
/***判断是不是闰年*/
public static boolean isLeapYear(int y)
{
return ((y%4==0 && y %100!=0) || y%400==0);
}
- - 我这修改的程序不能正确输出闰年的第一天的星期,,,郁闷.....原因何在呢...最想知道原理.... 展开
{
long n;
n=y*365; // 这句让我很费解....万一输入的年份是闰年怎么办?
for(i=1;i<y;i++)
{
if(isLeapYear(i)) n+=1;
}
return n%=7;
}
/***判断是不是闰年*/
public static boolean isLeapYear(int y)
{
return ((y%4==0 && y %100!=0) || y%400==0);
}
//======================修改后的程序=========================================
public static long firstDayOfYear(int y)
{
long n;
// n=y*365; // 这句让我很费解....万一输入的年份是闰年怎么办?
if(isLeapYear(y))
{
n=y*365+1;
}
else
{
n=y*365;
}
for(i=1;i<y;i++)
{
if(isLeapYear(i)) n+=1;
}
return n%=7;
}
/***判断是不是闰年*/
public static boolean isLeapYear(int y)
{
return ((y%4==0 && y %100!=0) || y%400==0);
}
- - 我这修改的程序不能正确输出闰年的第一天的星期,,,郁闷.....原因何在呢...最想知道原理.... 展开
展开全部
public static long firstDayOfYear(int y)
{
long n=1;
// n=y*365; // 这句让我很费解....万一输入的年份是闰年怎么办?
for(int i=1;i<y;i++)
{
if(isLeapYear(i)) n+=2;
else n+=1; //闰年和非闰年的区别就是一个整除7余1 一个整除7于2
}
return n%=7;
}
/***判断是不是闰年*/
public static boolean isLeapYear(int y)
{
return ((y%4==0 && y %100!=0) || y%400==0);
}
{
long n=1;
// n=y*365; // 这句让我很费解....万一输入的年份是闰年怎么办?
for(int i=1;i<y;i++)
{
if(isLeapYear(i)) n+=2;
else n+=1; //闰年和非闰年的区别就是一个整除7余1 一个整除7于2
}
return n%=7;
}
/***判断是不是闰年*/
public static boolean isLeapYear(int y)
{
return ((y%4==0 && y %100!=0) || y%400==0);
}
追问
int y = 2012;
long n=1;
//为什么把n 设置成1了???这是什么变量... 原来 乘以365的时候 我的理解是公元1年1月1日起到2012年的相差天数...现在设置成1 是代表什么 T. T
//这么写答案是正确的...输出结果是0 表示2012年 第一天是星期天.. 看日历的确是这样... 能说说原理么....感谢....
追答
写为1的原因:你计算的是每年的第一天,例如你计算的是第100天是星期几,那就可以写成100
原理:从公元1年1月1日 是星期1 ,由于非闰年时整除7余1,闰年整除7余2,整个正确的写法为
long n=1;
for(int i=1;i<y;i++)
{
if(isLeapYear(i)) n+=366;
else n+=365;
}
return n%=7;
这样写你肯定就好理解了
展开全部
public static void main(String[] args) {
String test="2013";
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR,Integer.parseInt(test));
cal.set(Calendar.MONTH,0);
cal.set(Calendar.DAY_OF_MONTH, 1);
System.out.println(new SimpleDateFormat("yyyyMMdd").format(cal.getTime()));
System.out.println(cal.get(Calendar.DAY_OF_WEEK));
}
用这个工具类,其他一切都不用你操心 ,你只要保证构建的时间是对的,然后返回的常量值和你的一样,就行了
String test="2013";
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR,Integer.parseInt(test));
cal.set(Calendar.MONTH,0);
cal.set(Calendar.DAY_OF_MONTH, 1);
System.out.println(new SimpleDateFormat("yyyyMMdd").format(cal.getTime()));
System.out.println(cal.get(Calendar.DAY_OF_WEEK));
}
用这个工具类,其他一切都不用你操心 ,你只要保证构建的时间是对的,然后返回的常量值和你的一样,就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
真心不用这么麻烦...
SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat dateFm = new SimpleDateFormat("EEEE");
Date date = formatDate.parse("2013-01-01"); //字符串转日期
System.out.println( dateFm.format(date) ); //输出星期几
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
n=(y-1900)*365+1;
n=(y-1900)*365;
y需要减去1900
n=(y-1900)*365;
y需要减去1900
追问
- - 按你说的把n修改了... 得到错误的答案呢... 给y 赋值 2012 输出结果是 - - 5.... 应该是 0 ...为什么要减去1900?
追答
因为根据sun官方文档的定义,1900年1月1日是星期一,所以用当前年份减去1900得知中间的年数,在判断其中多少闰年,多少平年,乘以相应的365/366计算出总天数,再除7,得到星期
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询