在这个程序中,我大约一整天了。 例如,通过输入1 1 2014我得到输出为星期三.. 但不是在闰年的例子,通过输入1 1 2000我得到周六的确切答案.. 但我得到答案1 1 2000是星期一..任何人都可以解决这个问题......
//reference i made this program: http://easycalculation.com/funny/shortcuts/day.php
//gd = given date
//gm = given month
//gy = given year
//ym = year modulus (year % 100 to get last two digits)
//yp = year process (ym%4 to get remainder)
//wd = week days (0 for sunday, 1 for monday and so on...)
//d = day calculation (to get remainder from 0 to 6 .. which represents wd[0]
//for sunday so on)
import java.util.Scanner;
class dayof
{
public static void main(String arg[])
{
int gd,gm,gy,ym,yp,d;
int[] m=new int[]{0,3,3,6,1,4,6,2,5,0,3,5};
String[] wd=new String[]{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
Scanner ip=new Scanner(System.in);
System.out.println("Enter Date Month Year \"DD MM YYYY\"");
gd=ip.nextInt();
gm=ip.nextInt();
gy=ip.nextInt();
ym=gy%100;
yp=ym%4;
d=(gd+m[gm-1]+ym+yp+1)%7;
System.out.print(wd[d]);
}
}
答案 0 :(得分:2)
如果我理解正确你想要打印日期。
试试这个:
int day=ip.nextInt();
int month=ip.nextInt();
int year=ip.nextInt();
Calendar cal = Calendar.getInstance();
cal.set(year, month, day);
cal.get(Calendar.DAY_OF_WEEK);
Date(year,month,day)
现已弃用。您可以尝试Joda-Time
或者您应该尝试:
Date date = new SimpleDateFormat("dd MM yyyy").parse(input);
String day = new SimpleDateFormat("EEEEE").format(date);
其他格式see Java Date Format Docs:
答案 1 :(得分:1)
我认真地建议你使用更好的变量名;很难分辨出什么是什么。但是你的问题的答案是你的数组m
没有考虑到闰年。你需要一个这样的数组用于非闰年和一个不同的数组用于闰年。
答案 2 :(得分:1)
试试这个
Date date = new SimpleDateFormat("dd MM yyyy").parse(input);
String day = new SimpleDateFormat("EEEEE").format(date);
答案 3 :(得分:1)
将您的块更改为此...我保留了您的变量名称(其他人指出的内容很神秘且难以记住),但为我添加的变量使用了更详细的名称...这应该适用于在1900年3月1日到2100年2月29日之间的任何日期......我通常不会给明显的家庭作业给出答案,但你使用的页面是一个糟糕的算法,而你确实拥有它几乎右。
int gd,gm,gy,ym,yp,d,isJanFeb;
int[] m=new int[]{0,3,3,6,1,4,6,2,5,0,3,5};
String[] wd=new String[]{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
Scanner ip=new Scanner(System.in);
System.out.println("Enter Date Month Year \"DD MM YYYY\"");
gd=ip.nextInt();
gm=ip.nextInt();
gy=ip.nextInt();
ym=gy-1900; // years since 1900
yp=ym/4; // leap years since 1900
isJanFebLeap = ( gm < 3 && gy%4 == 0) ? 6 : 0;
System.out.println(gd + " " + gm + " " + gy + " " + ym + " " + yp);
d=(gd+m[gm-1]+ym+yp +isJanFebLeap)%7;
System.out.print(wd[d]);
你的算法没有考虑闰年2月29日之前的日期(你需要减去1 - 或者增加6 mod 7 - 对于今年晚些时候的闰日)...它也没有考虑到考虑到新世纪(具体而言,那是1/1/1900与2000年1月1日不同的一天)。您不希望gy%100
,gy-1900
。
如果你想将它扩展到1900-2100范围之外,考虑到这个事实是,世纪年不可被400整除是闰年。所以1700,1800,1900,2100,2200,2300不是闰年,而是2000年。