Java 如何正确计算年中日法

Java 如何正确计算年中日法,java,algorithm,Java,Algorithm,您好,以下方法不太有效: public static int dayInYear(int day, int month, int year) { // Returns the number (1.. 366) of the day on which day/month/year falls int dayNumber = (month - 1) * 31 + day; if (month > 2) { dayNumber = dayNumber - ((4 * month + 23)

您好,以下方法不太有效:

public static int dayInYear(int day, int month, int year) {
// Returns the number (1.. 366) of the day on which day/month/year falls
int dayNumber = (month - 1) * 31 + day;
if (month > 2) {
  dayNumber = dayNumber - ((4 * month + 23) / 10);
if (isLeapYear(year)) dayNumber++;
}
 return dayNumber;
} // dayInYear

当我把它放到一个程序中时,它会编译,但不会给出正确的答案 我做了案头检查,问题出在dayInYear方法上

例如:2009年2月5日的收益率应该是36,但我得到了122

任何对正确方法的洞察都是值得赞赏的…

java.time 看起来你正在尝试使用自己的年度计算器。但是,如果您想利用在您之前的开发人员的辛勤工作,您可以使用该类在简单的一行程序中完成此计算

public static int dayInYear(int day, int month, int year) {
    return LocalDate.of(year, month, day).getDayOfYear();
}
这些java.time类内置于java 8及更高版本中,请参阅。

java.time 看起来你正在尝试使用自己的年度计算器。但是,如果您想利用在您之前的开发人员的辛勤工作,您可以使用该类在简单的一行程序中完成此计算

public static int dayInYear(int day, int month, int year) {
    return LocalDate.of(year, month, day).getDayOfYear();
}
这些java.time类内置于java 8及更高版本中,请参阅。

让我运行您的代码:

public static void main(String[] args) {
    System.out.println(dayInYear(5, 2, 2009));
    System.out.println(dayInYear(2, 5, 2009));
}
输出:

36
122
你说你得到了122,所以你调用它作为上面主方法的第二行:
dayInYear(2,52009)

这与日期“2009年5月2日”相对应,因为您自己的方法
dayInYear
中的参数顺序是:日、月、年

你说你想要日期“2009年2月5日”。在这种情况下,您应该将其作为
dayInYear(52009)
(上述主方法中的第一行)传递。然后结果是36,正如您所预期的

因此,您的代码没有问题,但是,您需要正确地调用它。

让我运行您的代码:

public static void main(String[] args) {
    System.out.println(dayInYear(5, 2, 2009));
    System.out.println(dayInYear(2, 5, 2009));
}
输出:

36
122
你说你得到了122,所以你调用它作为上面主方法的第二行:
dayInYear(2,52009)

这与日期“2009年5月2日”相对应,因为您自己的方法
dayInYear
中的参数顺序是:日、月、年

你说你想要日期“2009年2月5日”。在这种情况下,您应该将其作为
dayInYear(52009)
(上述主方法中的第一行)传递。然后结果是36,正如您所预期的


因此,您的代码没有问题,但是,您需要正确地调用它。

我只是手工运行了一下。。。而且它是有效的。。。我不明白你在这个方法中传递了什么。应该是<代码>年日(2009年5月2日)将返回36,因为它只执行Java内置的第一个语句:
LocalDate::getDayOfYear
。看,我只是用手看了一遍。。。而且它是有效的。。。我不明白你在这个方法中传递了什么。应该是<代码>年日(2009年5月2日)将返回36,因为它只执行Java内置的第一个语句:
LocalDate::getDayOfYear
。看吧。事实上,既然我们已经有了约会时间课程,那就浪费你的时间。这些类取代了麻烦的旧日期时间类。大部分java.time功能都在中被移植到java 6和7,并进一步适应于中(请参阅)。事实上,既然我们已经有了类,那么滚动您自己的日期时间类是愚蠢的浪费时间。这些类取代了麻烦的旧日期时间类。大部分java.time功能都在中向后移植到java 6和7,并进一步适应于中(请参阅)