通过标准输入输入日期。输出星期几。

时间:2016-09-23 11:36:32

标签: java date calendar java.util.scanner

我需要代码以 mm dd yyyy 格式(通过标准输入)获取日期,并以简单的英语输出工作日。

样本输入(mm dd yyyy): 09 23 2016

预期输出:星期五

输出错误: SUNDAY

任何人都可以解释一下这里出了什么问题吗?谢谢。

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.");
        }
    }
}

3 个答案:

答案 0 :(得分:3)

Calendar.Month基于零:

  

MONTH public static final int MONTH

     

get和set的字段编号,表示月份。这是一个   特定于日历的值。格里高利一年中的第一个月   朱利安的日历是1月1日,是0;最后取决于   一年中的月数。另见:

所以9月10日,2016年10月23日是星期日。所以你必须使用cal.set(Calendar.MONTH, month-1);

如果您使用的是java8,则只需使用新的DateTime API:

LocalDate date = LocalDate.of(year, month, day);
System.out.println(date.getDayOfWeek());

答案 1 :(得分:1)

 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-1);
        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.");
    }

答案 2 :(得分:1)

问题出在这里。

cal.set(Calendar.MONTH, month);

如果Calendar.MONTH为0,则月份为1月。

如果Calendar.MONTH为1,则月份为2月。

如果Calendar.MONTH为2,则月份为3月,依此类推。

因此,当您输入09作为输入时,Calendar.MONTH将变为10月,而不是9月。这是因为,如上所述,Calendar.MONTH从0开始。

请改为尝试:

cal.set(Calendar.MONTH, month-1);