1

如何根据用户的输入实例化日历?我试过了:

Calendar cal = new GregorianCalendar(2011, Calendar.t.getMonth(month), 1);

但没有做到这一点。

import java.util.GregorianCalendar;
import java.util.Calendar;
import java.util.Scanner;

public class Test {
    public static void main(String[] args){
        Test t = new Test();
        Scanner sc = new Scanner(System.in);

        System.out.print("Enter a month: ");
        String month = sc.next();

        Calendar cal = new GregorianCalendar(2011, Calendar.JANUARY, 1);

        int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        System.out.print("There are "+days+" days in "+month+".");
    }
    private String getMonth(String month){
        return month;
    }
}

或者也许是一种更实际的方法?谢谢。

4

4 回答 4

2

您需要在月份中添加一个,因为它从 0 而不是 1 开始:

int month = sc.nextInt();
Calendar cal = new GregorianCalendar(2011, month + 1, 1);

或者如果您希望用户插入字符串而不是数值,那么您可以执行以下操作:

String month = sc.nextLine();
int iMonth = -1;
if(month.equalsIgnoreCase("January"))  iMonth = 0;
else if(month.equalsIgnoreCase("February")) iMonth = 1;
// and so on ...
Calendar cal = new GregorianCalendar(2011, iMonth, 1);
于 2011-11-21T13:08:12.820 回答
1

使用Joda Time而不是本机 Java GregorianCalendar。好多了,好多了!

 // From Joda Time documentatio
 // setup date object for midday on Christmas 2004
 Chronology chrono = GregorianChronology.getInstance();
 DateTime dt = new DateTime(2004, 12, 25, 12, 0, 0, 0, chrono);
于 2011-11-21T13:14:44.697 回答
0

对于每个枚举,Java 都有一个 valueOf(String) 静态函数,它将字符串转换为正确的枚举。不幸的是,Calendar 类的常量,例如 Calendar.JANUARY 是常量而不是枚举。对您来说最好的方法是构建一个以月份为名称的枚举,将这些月份连接到 Calendar 常量,然后在将用户的输入大写后,使用 valueOf 函数。

带代码:

public enum Months {

    JANUARY (0),
    FEBRUARY (1),
    MARS (2) // and so on

    private int value;

    test(int value){
        this.value = value;
    }
}

在你的课堂上,有一个像这样的功能:

private int monthFromString(String userInputMonth) {
   return Months.valueOf(userInputMonth);
}
于 2011-11-21T13:08:27.220 回答
0

GregorianCalendar并不意味着直接实例化(阅读javadocs),Calendar.getInstance()而是使用,并使用方法分配值set(int...)

于 2011-11-21T13:19:39.213 回答