Java 通过标准输入输入日期。每周的输出日。
我需要的代码,以采取一个通过标准的输入和输出的一周的一天在普通英语的格式mm-dd-yyyy的日期 样本输入年月日:2016年9月23日 预期产出:星期五 输出错误:星期日 谁能解释一下这里出了什么问题吗?多谢各位Java 通过标准输入输入日期。每周的输出日。,java,date,calendar,java.util.scanner,Java,Date,Calendar,Java.util.scanner,我需要的代码,以采取一个通过标准的输入和输出的一周的一天在普通英语的格式mm-dd-yyyy的日期 样本输入年月日:2016年9月23日 预期产出:星期五 输出错误:星期日 谁能解释一下这里出了什么问题吗?多谢各位 import java.io.*; import java.util.*; import java.time.*; public class DateToDay { public static void main(String[] args) { Scann
import java.io.*;
import java.util.*;
import java.time.*;
public class DateToDay {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int month = Integer.parseInt(in.next());
int day = Integer.parseInt(in.next());
int year = Integer.parseInt(in.next());
if ((year > 2000) && (year < 3000)) {
Calendar cal = Calendar.getInstance();
Locale locale = Locale.getDefault();
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH, day);
cal.set(Calendar.YEAR, year);
System.out.println(cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, locale).toUpperCase());
}
else {
System.out.println("Invalid date entered.");
}
}
}
是以零为基础的:
月份公共静态最终整数月份
表示月份的get和set字段号。这是一个
日历特定值。公历一年中的第一个月
儒略历法是一月,也就是0;最后一个取决于
一年中的月数。另见:
因此,2016年10月9日是10月,10月23日是周日。因此,您必须使用cal.setCalendar.MONTH,MONTH-1
如果您使用的是java8,则只需使用新的DateTime API即可:
LocalDate date = LocalDate.of(year, month, day);
System.out.println(date.getDayOfWeek());
问题就在这里
cal.set(Calendar.MONTH, month);
如果Calendar.MONTH为0,则月份为一月
如果Calendar.MONTH为1,则该月为2月
如果Calendar.MONTH为2,则月份为3月,依此类推
因此,当您输入09作为输入时,Calendar.MONTH变为十月,而不是九月。这是因为,如上所述,Calendar.MONTH从0开始
请尝试以下方法:
cal.set(Calendar.MONTH, month-1);
请看:边注:考虑使用java SE 8中介绍的新日期和时间API:在发布之前搜索堆栈溢出。减去1必须位于值。不在关键时刻也要解释你的答案,而不仅仅是邮政编码
cal.set(Calendar.MONTH, month-1);