2

下面的代码有什么问题?它给出了一年中任何日期的错误日期。

import java.util.Scanner;
import java.util.Calendar;
public class Solution {
    public static String getDay(String d, String m, String y) {

        String[] days = {"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"};
        Calendar c = Calendar.getInstance();
        c.set(Integer.parseInt(y), Integer.parseInt(m), Integer.parseInt(d)); 
        return days[c.get(Calendar.DAY_OF_WEEK) - 1]; 
    }
public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String m = in.next();
        String d = in.next();
        String y = in.next();

        System.out.println(getDay(d, m, y));
    }
}
4

2 回答 2

7

请参阅Calendar该类的文档:https ://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html#set-int-int-int-

月份的值以 0 为索引,因此如果您提供3月份值,则将其解释为“四月”。

于 2018-05-03T00:58:14.660 回答
3

拥有Scanner读取int值而不是字符串是最简单的:

    int m = in.nextInt();
    int d = in.nextInt();
    int y = in.nextInt();

    System.out.println(LocalDate.of(y, m, d).getDayOfWeek());

当我喂食5 4 2018(今天的日期)时,我得到FRIDAY,这是正确的。

如果必须使用字符串:

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("M/d/u");

    String m = in.next();
    String d = in.next();
    String y = in.next();

    System.out.println(LocalDate.parse(m + '/' + d + '/' + y, dateFormatter).getDayOfWeek());

您使用的Calendar课​​程早已过时,设计不佳,有时使用起来很麻烦。相反java.time,我推荐现代 Java 日期和时间 API。它好多了。对于一件小事,它以与人类相同的方式对一年中的月份进行编号。

此外,星期几的名称是内置的,所以不要重新发明轮子。您的字符串与DayOfWeekenum 中的枚举值的名称一致java.time,因此只需打印它们即可获得您想要的字符串。如果您不想全部大写,或者您想要另一种语言的日期名称,请使用DayOfWeek.getDisplayNameDateTimeFormatter.

链接: Oracle 教程:日期时间解释如何使用java.time.

于 2018-05-04T11:23:42.613 回答