查找给定日期的星期几

时间:2017-10-29 07:55:18

标签: java datetime calendar datetime-format dayofweek

我在hackerrank.com做了一个简单的例子,它要求我们返回给定日期的日期。例如:如果日期是2015年5月5日(月份日),则应该返回星期三。

这是我为此任务编写的代码

public static String getDay(String day, String month, String year) {
    String[] dates=new String[]{"SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY"};
    Calendar cal=Calendar.getInstance();
    cal.set(Integer.valueOf(year),Integer.valueOf(month),Integer.valueOf(day));
    int date_of_week=cal.get(Calendar.DAY_OF_WEEK);
    return dates[date_of_week-1];
}

我的代码返回'星期六'对于给定的例子应该是星期三'对于2017年10月29日的当前日期,它将返回星期三'。 有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:8)

假设您使用的是Java 8+,可以使用LocalDate之类的内容

public static String getDay(String day, String month, String year) {
    return LocalDate.of(
            Integer.parseInt(year),
            Integer.parseInt(month),
            Integer.parseInt(day)
    ).getDayOfWeek().toString();
}

另请注意,您将该方法描述为采用monthdayyear,但您是通过daymonth和{{1}来实施的(确保你正确地调用它)。我用

测试了上面的内容
year

我得到(正如预期的那样)

public static void main(String[] args) throws Exception {
    System.out.println(getDay("05", "08", "2015"));
    System.out.println(getDay("29", "10", "2017"));
}

如果您无法使用Java 8(或仅修复当前解决方案),则CalendarWEDNESDAY SUNDAY 的{​​{1}}偏移量为month Calendar#JANUARY为{ {1}})。所以你需要(并且更喜欢10,第一个返回一个原语 - 第二个返回parseInt实例),比如

valueOf

给出与上面相同的结果。

答案 1 :(得分:2)

基于cal.set(int,int,int)Integer中的月份为零。如果我使用public static String getDay(String day, String month, String year) { String[] dates = new String[] { "SUNDAY", "MONDAY", "TUESDAY", // "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY" }; Calendar cal = Calendar.getInstance(); cal.set(Integer.parseInt(year), // Integer.parseInt(month) - 1, // <-- add -1 Integer.parseInt(day)); int date_of_week = cal.get(Calendar.DAY_OF_WEEK); return dates[date_of_week - 1]; } 调用您的方法,则会返回星期日。因此,请使用少一个月即9来调用您的方法,或者使用当月的日历常量(Calendar)调用您的方法,或者在调用getDay("29", "9", "2017")时执行Calendar.OCTOBER

查看此运行演示:https://ideone.com/A6WGRJ。我还添加了日期打印,以确认它打印正确的日期。