Java Calendar.DAY\u OF\u WEEK给出了错误的日期
下面的代码有什么问题?对于一年中的任何日期,它都给出了错误的日期Java Calendar.DAY\u OF\u WEEK给出了错误的日期,java,date,dayofweek,java.util.calendar,Java,Date,Dayofweek,Java.util.calendar,下面的代码有什么问题?对于一年中的任何日期,它都给出了错误的日期 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", "THURS
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));
}
}
请参阅
日历类的文档:
月份的值是0索引的,因此如果您提供3
作为月份值,它将被解释为“四月”。最容易让扫描仪读取int
值,而不是字符串:
int m = in.nextInt();
int d = in.nextInt();
int y = in.nextInt();
System.out.println(LocalDate.of(y, m, d).getDayOfWeek());
当我输入2018年4月5日(今天的日期)时,我得到的是星期五,这是正确的
如果必须使用字符串:
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。好多了。一件小事是,它以人类一样的方式计算一年中的月份
此外,一周中几天的名称是内置的,因此不要重新发明轮子。您的字符串与java.time
中DayOfWeek
enum的值的名称一致,因此只需打印这些值即可获得所需的字符串。如果您不希望使用所有大写字母或希望使用另一种语言的日期名称,请使用DayOfWeek.getDisplayName
或DateTimeFormatter
链接:解释如何使用java.time
提供了2018年3月5日的信息,并于周四返回,这是正确的。您能提供失败场景的示例吗?我尝试了2015年8月5日(2015年8月5日),结果是星期六而不是星期三。@clement代码中的顺序是年月日。2018年3月5日是星期一,所以当你得到星期四时,它是不正确的。仅供参考,像、java.text.SimpleDateFormat
这样麻烦的旧日期时间类现在被java 8和更高版本中内置的类所取代。请参阅。该死的美国日期格式,我们在澳大利亚使用的是dd/mm/yyyy(在法国也是如此),2018年5月3日确实是一个星期四:)非常感谢。我通过从输入值中减去一个来修正这个月,它成功了。