返回给定日期的星期几的 getDay() 方法不起作用

新手上路,请多包涵

我正在尝试在 HackerRank 上完成名为 Java Date and Time 的任务。

任务

给你一个日期。您只需编写方法 getDay,它返回该日期的日期。例如,如果给定日期 2017 年 8 月 14 日,该方法应返回该日期的星期一。

我尽力完成任务,但我得到了 null 结果或 NullPointerException 错误。我想知道我哪里做错了。下面是我的代码:

提前致谢!

我的代码:

 import java.util.*;

public class Solution {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String month = in.next();
        String day = in.next();
        String year = in.next();

        System.out.println(getDay(day, month, year));
    }

    public static String getDay(String day, String month, String year) {
        Calendar cal = Calendar.getInstance();
        cal.set(Integer.valueOf(year), (Integer.valueOf(month) - 1), Integer.valueOf(day));
        return cal.getDisplayName(cal.get(Calendar.DAY_OF_WEEK), Calendar.LONG, Locale.getDefault());
    }
}

原文由 Said 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 612
2 个回答

你的 return 已关闭;您不希望 cal.get 在 --- cal.getDisplayName --- 的第一列中。目前,我用你的代码得到了月份名称。将其更改为

return cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());

并称之为

public static void main(String[] args) {
    System.out.println(getDay("14", "8", "2017"));
}

我得到(如预期的那样)

 Monday

在新代码中,我 更喜欢 java.time (Java 8+)中的新类,以及 DateTimeFormatter - 比如,

 public static String getDay(String day, String month, String year) {
    int y = Integer.parseInt(year), m = Integer.parseInt(month), d = Integer.parseInt(day);
    return java.time.format.DateTimeFormatter.ofPattern("EEEE")
            .format(LocalDate.of(y, m, d));
}

原文由 Elliott Frisch 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果你想使用 LocalDate,你可以这样使用

 import java.time.LocalDate;

 public static String getDay(int month, int day, int year) {

    return LocalDate.of(year, month, day).getDayOfWeek().name();

    }

原文由 selahaddin aksu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题