calendar.get(Calendar.MONTH);
返回当月的指数。例如,如果这行代码现在要执行,那么它将在8月份返回7。
然而
calendar.get(Calendar.AUGUST);
藏汉作为
calendar.get(Calendar.MONTH); in april
回报3?
这让我很难根据自己的开发环境获取正确的日期值。
有人能告诉我为什么这是现实吗?
calendar.get(Calendar.MONTH);
返回当月的指数。例如,如果这行代码现在要执行,那么它将在8月份返回7。
然而
calendar.get(Calendar.AUGUST);
藏汉作为
calendar.get(Calendar.MONTH); in april
回报3?
这让我很难根据自己的开发环境获取正确的日期值。
有人能告诉我为什么这是现实吗?
你不应该使用calendar.get(CALENDAR.AUGUST)
- 这是使用常数代表值就好像它是一个常数,表示一个字段类型。不幸的是,Calendar
API设计得太糟糕了,国际海事组织,但你真的需要明白为什么它没有意义。
4月份的日期返回3,原因与8月份的日期返回7相同 - 在Calendar
中,月份为0。我很惊讶,你是幸福的八月重返7而是由四月返回3迷茫......
无论如何,从文档的Calendar.MONTH
:对于GET
场码及设置指示一个月。这是一个日历特定的值。格里高利和朱利安历法中的第一个月是JANUARY,它是0;最后一个取决于一年中的月数。
我会强烈劝你看看Joda Time如果你做任何事情,甚至稍微不平凡的在Java中使用日期和时间 - 它比Date
/Calendar
一个多理智的和更具表现力的API。
Calendar.get()接受一个整数值,例如2来请求Month或7请求星期几。 MONTH和DAY_OF_WEEK是提供的最后整数,让您更易于指定这些值。
最后一个int AUGUST也恰好有一个值7(与DAY_OF_WEEK相同),但不打算传递给get(),它只是一个有用的int,对应于8月份返回的值(Java几个月基于零)
因此,将AUGUST传递给get()是没有意义的。这种混乱是Java枚举之前的遗留问题。如果Calendar类设计为使用枚举,它将会更清晰。
这与Android完全无关。 java.util.Calendar
确实有一个糟糕的界面,但你也使用它错了。 calendar.get(Calendar.MONTH)
返回1月= 0的当前月份,calendar.get(Calendar.AUGUST)
没有意义。AUGUST
的常量值恰好为7,与Calendar.DAY_OF_WEEK
相同,因此您正在有效地获得星期几(星期二)。总之,不要那样做。
我想是时候看看第三方库。谢谢(你的)信息。 – doge
@Da_smokes:我没有注意到你在Android上 - 这会让它稍微难以使用Joda Time。 (特别是,为了空间和时间的缘故,您可能希望使用一组缩减的时区。)但是,这绝对有可能。另外,内置的类可以工作,你只需要小心。 –
我基本上想要做的是在任何时候都从静态时区获取yyyyMMddHH格式的日期字符串。而这些行似乎目前在做: DateTimeFormatter fmt = DateTimeFormat.forPattern(“yyyyMMddHH”); \t \t DateTime dt = new DateTime(); \t \t DateTimeZone ge = DateTimeZone.forID(“Europe/Stockholm”); \t \t fmt.withZone(ge); \t \t print(dt.toString(fmt)); – doge