Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 海关公历月_Java_Oop_Gregorian Calendar - Fatal编程技术网

Java 海关公历月

Java 海关公历月,java,oop,gregorian-calendar,Java,Oop,Gregorian Calendar,如何根据用户的输入实例化日历?我试过: 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

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

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开始,而不是从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);

对于每个枚举,Java都有一个valueOf(String)静态函数,用于将字符串转换为正确的枚举。不幸的是,Calendar类的常量(如Calendar.JANUARY)是常量,而不是枚举。 最好的方法是构建一个名为months的枚举,将这些月份连接到日历常量,然后在将用户的输入输入大写后,使用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);
}
使用而不是本机Java Gregorianalendar。好多了,好多了

 // 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);

gregoriacalendar
不是直接实例化的(阅读javadocs),而是使用
Calendar.getInstance()
,并使用
set(int…)
方法赋值。

不,它是一个int。请看我的答案:它是一个常量。如果你想把一个字符串转换成正确的整数,你需要再多编一点。@Eng.Fouad-woops,是的,这个月需要是一个整数。谢谢阅读API是一个很好的开始。是的,日历很糟糕。我无法想象是谁的主意使第0个月为基础,而绝对没有其他的零基础。@Peter,这个评论完全没有帮助-你至少可以链接到相关文档。