Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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_Calendar - Fatal编程技术网

Java 日历类问题

Java 日历类问题,java,calendar,Java,Calendar,我在日历课程中遇到问题 Calendar cal = Calendar.getInstance (); int iYear = cal.get (Calendar.YEAR); // get the current year int iMonth = cal.get (Calendar.MONTH); // month... int iDay = cal.get (Calendar.); // current day in the month 这个。。

我在
日历
课程中遇到问题

Calendar cal = Calendar.getInstance ();

int iYear  = cal.get (Calendar.YEAR);         // get the current year

int iMonth = cal.get (Calendar.MONTH);        // month...

int iDay   = cal.get (Calendar.); // current day in the month
这个。。。不行!!:-(

我使用了调试器,发现年和月的日是正确的, 但是,月份是1月,而月份应该是2月

这就是它变得更加怪异的地方:

然后我尝试了
cal.clear();

然后是
cal.set(2014,2,27);//今天的日期-2014年2月27日

月份仍然是1月(即1月)

我将日期设置为1月份(2014年1月1日),(2014年1月16日)等 它正确地给了我一个月的1分

在读了很多书并尝试了很多东西之后(并且把我的头发拔了出来……) 我把日期定在未来,我的生日(2014年5月23日)和其他日子。
对于这些日期,月被正确设置为5(五月)

日历中的月从0开始,这意味着0是一月,1是二月,等等


Java日期和时间API很糟糕。请改用。

日历中的月份从0开始,这意味着0是一月,1是二月,等等

Java日期和时间API很糟糕。请改用。

在中使用常量for month:etc

例如:

cal.set(2014, Calendar.FEBRUARY, 27);
在中为月份使用常量:etc

例如:

cal.set(2014, Calendar.FEBRUARY, 27);

让我们试试这个简单的程序:

import java.util.Calendar;
class CalendarExample {
public static void main(String args[]) {

Calendar calendar = Calendar.getInstance();
System.out.println("Current Date : " + calendar.get(Calendar.DATE));
System.out.println("Current Month : " + calendar.get(Calendar.MONTH));
System.out.println("Current Year : " + calendar.get(Calendar.YEAR));
System.out.print("Current Time : ");
System.out.print(calendar.get(Calendar.HOUR) + ":");
System.out.print(calendar.get(Calendar.MINUTE) + ":");
System.out.print(calendar.get(Calendar.SECOND));
}
}
您得到了o/p:

Current Date : 28
Current Month : 1
Current Year : 2014
Current Time : 11:18:3

让我们试试这个简单的程序:

import java.util.Calendar;
class CalendarExample {
public static void main(String args[]) {

Calendar calendar = Calendar.getInstance();
System.out.println("Current Date : " + calendar.get(Calendar.DATE));
System.out.println("Current Month : " + calendar.get(Calendar.MONTH));
System.out.println("Current Year : " + calendar.get(Calendar.YEAR));
System.out.print("Current Time : ");
System.out.print(calendar.get(Calendar.HOUR) + ":");
System.out.print(calendar.get(Calendar.MINUTE) + ":");
System.out.print(calendar.get(Calendar.SECOND));
}
}
您得到了o/p:

Current Date : 28
Current Month : 1
Current Year : 2014
Current Time : 11:18:3

请参见Calendar类中提供的月常量说明

Calendar.MONTH
公共静态最终整数月

表示月份的get和set字段号。这是一个特定于日历的值。在公历和儒略历中,一年的第一个月是1月,即0;最后一个月取决于一年中的月数

因此,如果您想在日历中设置日期,请使用下面的代码段

cal.set(2014, Calendar.FEBRUARY, 28);

我想这会对您有所帮助。

请参阅日历类中提供的月常数说明

Calendar.MONTH
公共静态最终整数月

表示月份的get和set字段号。这是一个特定于日历的值。在公历和儒略历中,一年的第一个月是1月,即0;最后一个月取决于一年中的月数

因此,如果您想在日历中设置日期,请使用下面的代码段

cal.set(2014, Calendar.FEBRUARY, 28);
我想这会对你有帮助。

tl;dr java.time 现代方法使用业界领先的java.time类

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

时区对于确定日期至关重要。对于任何给定的时刻,全球各地的日期都因区域而异。例如,年午夜后几分钟是新的一天,而年仍然是“昨天”

如果未指定时区,JVM将隐式应用其当前默认时区。该默认时区可能随时更改,因此结果可能会有所不同。最好将所需/预期时区显式指定为参数

请以
大陆/地区
的格式指定一个,例如,或
太平洋/奥克兰
。切勿使用3-4个字母的缩写,例如
EST
IST
,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)

如果要使用JVM的当前默认时区,请请求该时区并将其作为参数传递。如果省略,则会隐式应用JVM的当前默认时区。最好是显式的

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.
或者指定一个日期。您可以通过数字设置月份,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
对象,而不仅仅是一个整数,以使您的代码更具自文档性,确保有效值,并提供有效的数据

部分 根据需要询问零件

int dayOfMonth = ld.getDayOfMonth() ;
int month = ld.getMonthValue() ;
int year = ld.getYear() ;

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

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

要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android,该项目采用了ThreeTen Backport(如上所述)
该项目使用其他类扩展了java.time。该项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,如、、。

tl;dr java.time 现代方法使用业界领先的java.time类

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

时区对于确定日期至关重要。对于任何给定的时刻,全球各地的日期都因区域而异。例如,年午夜后几分钟是新的一天,而年仍然是“昨天”

如果未指定时区,JVM将隐式应用其当前默认时区。该默认时区可能随时更改,因此结果可能会有所不同。最好将所需/预期时区显式指定为参数

请以
大陆/地区
的格式指定一个,例如,或
太平洋/奥克兰
。切勿使用3-4个字母的缩写,例如
EST
IST
,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)

如果要使用JVM的当前默认时区,请请求该时区并将其作为参数传递。如果省略,则会隐式应用JVM的当前默认时区。最好是显式的

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.
或者指定一个日期