2

我有一个班级作业:

该类应该有一个方法来计算两个日期之间的天数,返回星期几并给出给定日期的星座。

这是我写的代码:

import java.util.GregorianCalendar;

public class Data {
    private GregorianCalendar date;

    public Data(int year, int month, int day) {
        date = new GregorianCalendar(year, month + 1, day);
    }

    public int differenceInDaysFrom(int year, int month, int day) {
        GregorianCalendar tempDate = new GregorianCalendar(year, month, day);
        int daysBetween = (int)(tempDate.getTimeInMillis()-date.getTimeInMillis())/(1000 * 60 * 60 * 24);
        return Math.abs(daysBetween);
    }

    public String dayOfTheWeek() {
        String[] stringDays = new String[]{ "Monday",
                                            "Tuesday",
                                            "Wednesday",
                                            "Thursday",
                                            "Friday",
                                            "Saturday",
                                            "Sunday" };
        return stringDays[date.get(GregorianCalendar.DAY_OF_WEEK) - 1];
    }

    public void zodiacSign() {
        int day = date.get(GregorianCalendar.DATE);
        int month = date.get(GregorianCalendar.MONTH);

        System.out.println(day + " " + month);
    }
}
  1. 当我date使用 YYY\MM\DD 进行初始化时,在检查 dayOfTheWeek 的近期日期时一切正常,但是当我输入我的出生日期 (1991\11\14) 时,它会在星期三返回,但我是在星期四出生的。

  2. 当我试图获取 day 和 mont 来检查星座时,它完全吓坏了,当我输入 11 时返回 0(对于月份,days 效果很好)。

  3. 更重要的是......当我开始寻找+1月份时甚至differenceInDaysFrom停止正常工作

4

3 回答 3

3

关于你生日(周三或周四)的问题:

首先,您必须将第 10 个月作为 11 月自0=January. 其他答案已经发现了这一点。

那么你需要将你的 String 数组声明为:

    new String[] { "Sunday", "Monday", "Tuesday", 
"Wednesday", "Thursday", "Friday", "Saturday" };

因为,DAY_OF_WEEK, 1=Sunday, 2=MONDAY,请检查 Calendar 类的 javaDoc。然后你应该得到“星期四”

为十二生肖法。您输入了 11,因此您收到的日期对象月份参数为 11+1=12。12 不是有效月份(0-11 是有效的,如上所述,Jan=0)因此你吓坏了。:)

于 2012-12-17T20:51:45.970 回答
1

看一下这个:

Days d = Days.daysBetween(startDate, endDate);
int days = d.getDays();
http://joda-time.sourceforge.net/faq.html#datediff

您的问题之一是您每月 +1,而月份从 0 到 11(我知道很愚蠢)所以 11+1 是 12,这是无效的。(我认为您可以设置严格性)

于 2012-12-17T20:43:46.467 回答
1

而不是month + 1你需要month-1,也换行 11 -> 0。

date = new GregorianCalendar(year, (month == 0) ? 11 : month - 1, day);
于 2012-12-17T20:48:20.787 回答