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

Java GregorianCalendar显示奇数值?

Java GregorianCalendar显示奇数值?,java,android,calendar,Java,Android,Calendar,嗯 返回当前月份的索引。例如,如果现在执行这行代码,它将在8月份返回7 然而 calendar.get(Calendar.MONTH); 以及 calendar.get(Calendar.AUGUST); 返回3 这使得我很难根据开发环境获得正确的日期值 有人能告诉我为什么会这样吗?Calendar.get()接受一个整数,其值为2以请求月份,7以请求星期几。周中的月和日是提供的最终整数,以便更容易地指定这些值 最后一个int-AUGUST也恰好有一个值7(与周中的天相同),但并不打算传

返回当前月份的索引。例如,如果现在执行这行代码,它将在8月份返回7

然而

calendar.get(Calendar.MONTH); 
以及

calendar.get(Calendar.AUGUST); 
返回3

这使得我很难根据开发环境获得正确的日期值

有人能告诉我为什么会这样吗?

Calendar.get()接受一个整数,其值为2以请求月份,7以请求星期几。周中的月和日是提供的最终整数,以便更容易地指定这些值

最后一个int-AUGUST也恰好有一个值7(与周中的天相同),但并不打算传递给get(),它只是一个有用的int,对应于8月份返回的值(Java月份是以零为基础的)

因此,通过八月来获取()是没有意义的。这种混乱是enum之前Java时代的遗留问题。如果Calendar类被设计为使用枚举,那么一切都会更清晰。

Calendar.get()接受一个整数,其值为2以请求月份,或7以请求星期几。周中的月和日是提供的最终整数,以便更容易地指定这些值

最后一个int-AUGUST也恰好有一个值7(与周中的天相同),但并不打算传递给get(),它只是一个有用的int,对应于8月份返回的值(Java月份是以零为基础的)


因此,通过八月来获取()是没有意义的。这种混乱是enum之前Java时代的遗留问题。如果Calendar类被设计为使用枚举,那么一切都会变得更清晰。

您不应该使用
Calendar.get(Calendar.AUGUST)
-它使用一个表示值的常量,就像它是一个表示字段类型的常量一样。不幸的是,
Calendar
API设计得如此糟糕,让这种情况发生,IMO,但你真的需要理解为什么它没有意义

4月的日期返回3,原因与8月的日期返回7相同-在
日历中,月份以0为基础。我很惊讶你对8月7日的回归感到高兴,但对4月3日的回归感到困惑

无论如何,从以下文档:

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


我强烈建议您在Java中使用日期和时间做任何事情,哪怕是稍微有点琐碎的事情,都要仔细研究一下——这是一个比
Date
/
Calendar

更明智、更具表现力的API,您不应该使用
Calendar.get(Calendar.AUGUST)
-它使用一个表示值的常量,就像它是一个表示字段类型的常量一样。不幸的是,
Calendar
API设计得如此糟糕,让这种情况发生,IMO,但你真的需要理解为什么它没有意义

4月的日期返回3,原因与8月的日期返回7相同-在
日历中,月份以0为基础。我很惊讶你对8月7日的回归感到高兴,但对4月3日的回归感到困惑

无论如何,从以下文档:

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


我强烈建议您研究一下是否在Java中使用日期和时间做任何事情,哪怕是稍微不平凡的事情——这是一个比
Date
/
Calendar

更理智、更具表现力的API,这与Android完全无关
java.util.Calendar
的接口肯定不好,但您也用错了
calendar.get(calendar.MONTH)
返回当前月份,其中一月=0,
calendar.get(calendar.AUGUST)
没有意义。八月的const值恰好是7,这与日历相同。一周中的第几天,因此您实际上得到了一周中的第几天(星期二)。简而言之,不要这样做。

这与Android完全无关
java.util.Calendar
的接口肯定不好,但您也用错了
calendar.get(calendar.MONTH)
返回当前月份,其中一月=0,
calendar.get(calendar.AUGUST)
没有意义。八月的const值恰好是7,这与日历相同。一周中的第几天,因此您实际上得到了一周中的第几天(星期二)。简而言之,不要这样做。

我想是时候研究第三方库了。谢谢你提供的信息。@Da_smokes:我没有注意到你在安卓系统上-这会使使用Joda Time变得稍微困难一些。(特别是,为了空间和时间的缘故,你可能想使用一组缩减的时区。)然而,这绝对是可能的。另外,内置类也可以工作,您只需要小心。我基本上想做的是始终从静态时区获取yyyyMMddHH格式的日期字符串。现在这些行似乎起到了作用:DateTimeFormatter fmt=DateTimeFormat.forPattern(“yyyyMMddHH”);DateTime dt=新的DateTime();DateTimeZone ge=DateTimeZone.forID(“欧洲/斯德哥尔摩”);fmt.withZone(通用电气);打印(dt.toString(fmt))@达乌抽烟:是的,乔达时间很愉快。但我相信,在Android上启动可能需要一段时间。环顾四周,看看是否有人做过定制的Android版本。@Da_smokes:我刚刚注意到你没有使用
fmt.withZone
-你应该使用
fmt=fmt.withZone(ge)或类似的东西。格式化程序本身是不可变的。我想是时候研究第三方库了。谢谢你提供的信息。@Da_smokes:我没注意到你
calendar.get(Calendar.MONTH); in april