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

问题描述 投票:2回答:3

我有一个课程作业:

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

这是我写的代码:

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. 更重要的是...当我开始与+1唠叨到一个月甚至differenceInDaysFrom停止正常工作
java calendar gregorian-calendar
3个回答
3
投票

对于你的生日问题(星期四或星期四):

首先,你必须在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
投票

看一下这个:

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

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


1
投票

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

date = new GregorianCalendar(year, (month == 0) ? 11 : month - 1, day);
© www.soinside.com 2019 - 2024. All rights reserved.