如何根据用户的输入实例化日历?我试过了:
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;
}
}
或者更实际的做法呢?感谢。
答案 0 :(得分: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);
答案 1 :(得分: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);
答案 2 :(得分:0)
对于每个枚举,Java都有一个valueOf(String)静态函数,它将String转换为适当的枚举。遗憾的是,Calendar类的常量(如Calendar.JANUARY)是常量而不是枚举。 最好的方法是构建一个名为months的枚举,将这些月份连接到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);
}
答案 3 :(得分:0)
GregorianCalendar
不是要直接实例化(请阅读javadocs),而是使用Calendar.getInstance()
,并使用set(int...)
方法分配值。