Java 查找给定日期的星期几
我在hackerrank.com上做了一个简单的例子,要求我们返回给定日期的日期。例如:如果日期是2015年5月8日(年月日),则应在星期三返回 这是我为此任务编写的代码Java 查找给定日期的星期几,java,datetime,calendar,datetime-format,dayofweek,Java,Datetime,Calendar,Datetime Format,Dayofweek,我在hackerrank.com上做了一个简单的例子,要求我们返回给定日期的日期。例如:如果日期是2015年5月8日(年月日),则应在星期三返回 这是我为此任务编写的代码 public static String getDay(String day, String month, String year) { String[] dates=new String[]{"SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SA
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日,返回“星期三”。
有人能帮我解决这个问题吗?假设您使用的是Java 8+,您可以使用
public static String getDay(String day, String month, String year) {
return LocalDate.of(
Integer.parseInt(year),
Integer.parseInt(month),
Integer.parseInt(day)
).getDayOfWeek().toString();
}
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];
}
另外,请注意,您将该方法描述为以月
、日
和年
为单位,但您实现了以日
、月
和年
为单位的方法(请确保正确调用该方法)。我测试了上面的测试
public static void main(String[] args) throws Exception {
System.out.println(getDay("05", "08", "2015"));
System.out.println(getDay("29", "10", "2017"));
}
我得到了(如预期的那样)
如果您不能使用Java 8(或只是为了修复当前的解决方案),则需要从1
(is0
)减去month
)。因此,您需要(并且更喜欢parseInt
而不是valueOf
),第一个返回一个原语,第二个返回一个Integer
实例)如下
public static String getDay(String day, String month, String year) {
return LocalDate.of(
Integer.parseInt(year),
Integer.parseInt(month),
Integer.parseInt(day)
).getDayOfWeek().toString();
}
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];
}
公共静态字符串getDay(字符串日、字符串月、字符串年){
字符串[]日期=新字符串[]{“星期日”、“星期一”、“星期二”//
“星期三”、“星期四”、“星期五”、“星期六”};
Calendar cal=Calendar.getInstance();
校准集(整数.parseInt(年)//
Integer.parseInt(month)-1,//日历中的month
是以零为基的。如果我用getDay(“29”、“9”、“2017”)
调用你的方法,它将返回星期天。因此,用一个月(即9)调用你的方法,或者用该月的日历常量(Calendar.十月
)调用它,或在调用cal.set
时执行month+1
查看此正在运行的演示:。我还添加了日期打印,以确认它打印的日期正确。@elliotfrisch我相信您正在考虑
java.util.date
。是的,我在月份中添加了-1。现在它工作正常。谢谢。最后一部分不正确。请查看该->打印的年份。从1900开始的偏移量部分用于java.util.Date(整数年、整数月、整数日期)
@Vasan Wow.Fixed.Thank.@ElliottFrisch它成功了。我在'month'参数中添加了-1。非常感谢。DayOfWeek::getDisplayName
将自动本地化该DayOfWeek
对象的名称。你真的必须使用日历而不是更现代的java.time
API吗?LocalDayDate
要比这好得多。(另外,接受日/月/年而不是年/月/日顺序中的参数感觉很奇怪;为什么接受它们作为字符串而不是整数?如果调用代码只有字符串,它可以自己执行解析。)@JonSkeet是的,我试过LocalDate。这比使用日历更好。