获得适当的一周和一个月的日子

时间:2012-12-17 20:34:23

标签: java calendar gregorian-calendar

我的课程有一个作业:

  

该课程应该有一种方法来计算两个日期之间的天数,返回星期几,并给出给定日期的黄道十二宫的标志。

这是我写的代码:

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. 当我使用YYY \ MM \ DD初始化date时,一切都很完美,当我们检查dayOfTheWeek的近期日期时,但是当我把我的出生日期(1991 \ 11 \ 14)它返回时,它会在周三返回我星期四出生。

  2. 当我想要获得一天和mont来检查星座时,它完全吓坏了,当我进入11时返回0(月份,天很好)。

  3. 更重要的是......当我开始使用+1differenceInDaysFrom开始徘徊甚至{{1}}停止正常工作时

3 个答案:

答案 0 :(得分:3)

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

首先你必须在11月以后通过{10}。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)因此你吓坏了。 :)

答案 1 :(得分: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这是无效的。 (我认为你可以设定一个严格的程度)

答案 2 :(得分:1)

而不是month + 1您需要month-1,还要包裹11 - > 0

date = new GregorianCalendar(year, (month == 0) ? 11 : month - 1, day);