查找给定日期的星期几
Finding the day of week of a given date
我在 hackerrank.com 中做了一个简单的例子,它要求我们 return 给定日期的那一天。例如:如果日期是 08 05 2015(月日年),它应该 return 星期三。
这是我为此任务编写的代码
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];
}
我的代码 returns 'Saturday' 对于给定的例子应该是 'Wednesday'。对于当前日期 10 29 2017,它 returns 'Wednesday'。
谁能帮我解决这个问题?
假设您使用的是 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();
}
此外,请注意,您将方法描述为采用 month
、day
和 year
,但您实施它采用 day
、month
和 year
(确保你正确调用它)。我用
测试了上面的内容
public static void main(String[] args) throws Exception {
System.out.println(getDay("05", "08", "2015"));
System.out.println(getDay("29", "10", "2017"));
}
然后我得到(如预期的那样)
WEDNESDAY
SUNDAY
如果您不能使用 Java 8(或只是为了修正您当前的解决方案),Calendar
takes a month
offset from 1
(Calendar#JANUARY
就是 0
)。所以你需要(并且更喜欢 parseInt
而不是 valueOf
,第一个 returns 一个原始的 - 第二个 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];
}
结果与上面相同。
Calendar
中的月份在 cal.set(int,int,int) 中为零。如果我用 getDay("29", "9", "2017")
调用你的方法,它 returns 星期天。因此,用少一个月(即 9)调用您的方法,或者使用月份的日历常量(Calendar.OCTOBER
)调用它,或者在对 cal.set
.[=17= 的调用中执行 month+1
]
查看此 运行 演示:https://ideone.com/A6WGRJ。我还添加了打印日期以确认它打印了正确的日期。
我在 hackerrank.com 中做了一个简单的例子,它要求我们 return 给定日期的那一天。例如:如果日期是 08 05 2015(月日年),它应该 return 星期三。
这是我为此任务编写的代码
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];
}
我的代码 returns 'Saturday' 对于给定的例子应该是 'Wednesday'。对于当前日期 10 29 2017,它 returns 'Wednesday'。 谁能帮我解决这个问题?
假设您使用的是 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();
}
此外,请注意,您将方法描述为采用 month
、day
和 year
,但您实施它采用 day
、month
和 year
(确保你正确调用它)。我用
public static void main(String[] args) throws Exception {
System.out.println(getDay("05", "08", "2015"));
System.out.println(getDay("29", "10", "2017"));
}
然后我得到(如预期的那样)
WEDNESDAY
SUNDAY
如果您不能使用 Java 8(或只是为了修正您当前的解决方案),Calendar
takes a month
offset from 1
(Calendar#JANUARY
就是 0
)。所以你需要(并且更喜欢 parseInt
而不是 valueOf
,第一个 returns 一个原始的 - 第二个 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];
}
结果与上面相同。
Calendar
中的月份在 cal.set(int,int,int) 中为零。如果我用 getDay("29", "9", "2017")
调用你的方法,它 returns 星期天。因此,用少一个月(即 9)调用您的方法,或者使用月份的日历常量(Calendar.OCTOBER
)调用它,或者在对 cal.set
.[=17= 的调用中执行 month+1
]
查看此 运行 演示:https://ideone.com/A6WGRJ。我还添加了打印日期以确认它打印了正确的日期。