2

这是我在这个网站上的第一个问题,但我一直觉得这个网站非常有用。
我的问题是:

  1. 您要求对方给出日期(例如,填写日期 [dd-mm-yyyy]: 16-10-2013)
  2. 你不必问2年之间的间隔(例如,给出一个间隔[yyyy-yyyy]:1800-2000)

当程序运行时,它必须显示给定日期是星期几。在这种情况下,它是一个星期三。比节目还要看哪一年,在这之间的间隔中,10 月 16 日的日期也落在了星期三。

所以最后它必须看起来像这样:

Fill in a date: [dd-mm-yyyy]: 16-10-2013
Give an interval [yyyy-yyyy]: 1900-2000
16 October was a wednesday in the following years:
1905 1911 1916 1922 1933 1939 1944 1950 1961 1967 1972 1978 1989 1995 2000

完整日期是 2013 年 10 月 16 日星期三

小(或最大)问题是,我不允许在 java 中使用 DATE.function。

如果有人可以帮助我完成第二部分,我会非常高兴,因为我不知道我应该怎么做

要找出给定日期是一周中的哪一天,我使用 Zeller Congruence


class Day {

Date date; //To grab the month and year form the Date class
           //In this class I check whether the giving date is in the correct form
int day;
int year1; //First interval number
int year2; //Second interval number

final static String[] DAYS_OF_WEEK = {
        "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
        "Friday"
    };

public void dayWeekInterval{
    int interval.year1;
    int interval.year2;

    for(int i = year1; year1 =< year2; year1++) {
        //check if the day of the week in the giving year, is the same as the
        //original year.
    }
}

public void dayOfTheWeek {
    int m = date.getMonth();
    int y = date.getYear();

    if (m &lt; 3) {
        m += 12;
        y -= 1;
    }

    int k = y % 100;
    int j = y / 100;

    int day = ((q + (((m + 1) * 26) / 10) + k + (k / 4) + (j / 4)) +
        (5 * j)) % 7;

    return day;
}

public string ToString(){
    return "" + DAYS_OF_WEEK[day] + day;
}


嘿,我改了一点代码,但我不知道如何打领带。另外我忘了提一下,我不允许使用java的日期和日历功能......而且我的outlook几乎做错了什么......

4

2 回答 2

1

只是一个简单的公式来查找给定日期 dd - MM - yyxx 的日期是,

( dd + m + xx + (xx/4) + (yy%4) ) % 7
 % is modulus operator which is remainder in general

上面得到的答案会告诉你星期几,即 0 : Mon 1: Tue .... 6 for Sun
Here,

dd - 给定日期
m - 显示在列表中的月份值,使用 MM 值计算 yy - 提供年份的前两位数
xx - 年份的后两位数

现在,m价值计算是,

  • 1 月和 10 月为 0
  • 1 代表 5 月
  • 2 为 8 月
  • 3 代表 2 月、3 月和 11 月
  • 4 六月
  • 9 月和 12 月 5 日
  • 6 代表 7 月和 4 月

请记住,如果提供的月份是 1 月或 2 月,并且提供的年份是闰年,则从m上表中的值中减去 1,即 -1 表示 1 月,2 表示 2 月
闰年计算

if (yyyy % 4 == 0)
{
   if( yyyy % 100 == 0)
   {
      return (yyyy % 400) == 0;
   }
   else
     return true;     
}

我希望你能做剩下的编程。
这将帮助您找到提供日期的星期几,现在您只需要添加所有年份的循环。

于 2013-10-26T15:51:08.543 回答
0

你不能用Date,但你能用Calendar吗?那么这将是您的代码:

    Calendar c = Calendar.getInstance();
    c.set(2013, 9, 16); // month starts at zero
    System.out.printf("Original date is: %tc\n", c);

    int weekday = c.get(Calendar.DAY_OF_WEEK);
    System.out.printf("Weekday of original date is [by number] %d\n", weekday);

    for(int year = 1800; year < 2000; year++) {
        c.set(Calendar.YEAR, year);
        if(weekday == c.get(Calendar.DAY_OF_WEEK))
            System.out.printf("%tc was same weekday!\n", c);
    }
于 2013-10-26T15:42:52.303 回答