我的课程有一个作业:
该课程应该有一种方法来计算两个日期之间的天数,返回星期几,并给出给定日期的黄道十二宫的标志。
这是我写的代码:
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);
}
}
当我使用YYY \ MM \ DD初始化date
时,一切都很完美,当我们检查dayOfTheWeek的近期日期时,但是当我把我的出生日期(1991 \ 11 \ 14)它返回时,它会在周三返回我星期四出生。
当我想要获得一天和mont来检查星座时,它完全吓坏了,当我进入11时返回0(月份,天很好)。
更重要的是......当我开始使用+1
与differenceInDaysFrom
开始徘徊甚至{{1}}停止正常工作时
答案 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);