Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/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 无法初始化GregorianCalendar对象_Java_Date_Calendar - Fatal编程技术网

Java 无法初始化GregorianCalendar对象

Java 无法初始化GregorianCalendar对象,java,date,calendar,Java,Date,Calendar,我是Java的完全初学者,我一直在编写简单的测试程序来复习我读到的一些材料。下面的代码块工作不正确。它应该接受用户提供的年、月和日期,然后创建一个用年、月和日期初始化的GregorianCalendar对象。但是,当我尝试返回GregorianCalendar变量的月份时,它总是返回我初始化月份变量的月份。我不知道为什么 import java.util.*; public class Prac { public static void main(String[] args){

我是Java的完全初学者,我一直在编写简单的测试程序来复习我读到的一些材料。下面的代码块工作不正确。它应该接受用户提供的年、月和日期,然后创建一个用年、月和日期初始化的GregorianCalendar对象。但是,当我尝试返回GregorianCalendar变量的月份时,它总是返回我初始化月份变量的月份。我不知道为什么

import java.util.*;
public class Prac {
    public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    System.out.print("Enter Year: ");
    int YEAR = input.nextInt();
    System.out.print("Enter Month: ");
    String MONTH_STRING = input.next();
    System.out.print("Enter Date: ");
    int DATE = input.nextInt();
    int MONTH = 10;
    String mon = MONTH_STRING.toLowerCase();

    if (mon == "january") {
        MONTH = 0;
    } else if (mon == "february") {
        MONTH = 1;
    } else if (mon == "march") {
        MONTH = 2;
    } else if (mon == "april") {
        MONTH =3;
    } else if (mon == "may"){
        MONTH =4;
    } else if (mon == "june"){
        MONTH =5;
    } else if (mon == "july"){
        MONTH =6;
    } else if (mon == "august"){
        MONTH=7;
    } else if (mon == "september"){
        MONTH=8;
    } else if (mon == "october"){
        MONTH=9;
    } else if (mon == "november"){
        MONTH=10;
    } else if (mon == "december"){
        MONTH =11;
    }

    GregorianCalendar entDate = new GregorianCalendar(YEAR,MONTH,DATE);
    System.out.println(entDate.get(Calendar.MONTH));
    }
}
另外,我知道我本可以使用开关块,但不知怎的,它给了我奇怪的错误

String.equals
您对字符串的比较不正确

=
操作符检查对象是否相同——表示相同的内存位置和所有内容

你要做的是方法

这将只检查字符串的值是否相等

此外,除非您使用的是Java1.7+,否则您将无法对字符串使用开关大小写。这并不是问题的一部分,但知道这一点仍然很好。

答案是正确的,应该被接受。您通常应该避免使用
=
与对象进行比较,而是调用
equals
isEqual
等方法

此外,您可以调用
String::equalsIgnoreCase
方法,而不是将字符串更改为小写

boolean sameIgnoringCase = thisString.equalsIgnoreCase( thatString ) ;
java.time 现代方法使用现代java.time类

LocalDate
该类表示一个仅限日期的值,不包含一天中的时间和时区

你可以用一个数字来设置月份,1-12月的数字为1-12

LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ;  // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.
使用
Month
enum比较月份,而不仅仅是数字或文本。该课程提供了12个实例,一年中每个月一个

Month month = ld.getMonth() ;  // Get `Month` enum object.
你可以

请注意,Java中的一个怪癖意味着您不能在开关内以
Month
(即
Month.janur
)作为
janur
的前缀。作为一种习惯,我经常将enum类名与对象名一起使用,除非在
开关中禁止使用

此外,您还可以找到方便的
EnumSet
EnumMap

Set< Month > winter = EnumSet.of( Month.DECEMBER , Month.JANUARY , Month.FEBRUARY ) ;
boolean isWinter = winter.contains( myLocalDate.getMonth() ) ;
Setwinter=EnumSet.of(Month.十二月、Month.一月、Month.二月);
布尔值isWinter=winter.contains(myLocalDate.getMonth());

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android,该项目采用了ThreeTen Backport(如上所述)。看

该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如、、和。

搜索“Java中的字符串相等”
mon==“一月”
并不像你想象的那样。啊,我早该知道的。非常感谢。此外,您可能希望使用日历中为月份定义的常量,而不是硬编码的整数值(Calendar.JANUARY等)。@FrankPavageau很好,月份总是因为它们的零相关性而绊倒我D
switch( month ) {
    case JANUARY: 
        …
    case FEBRUARY: 
        …
    default:
        …
}
Set< Month > winter = EnumSet.of( Month.DECEMBER , Month.JANUARY , Month.FEBRUARY ) ;
boolean isWinter = winter.contains( myLocalDate.getMonth() ) ;