所以我在让timeStamp显示正确的月份时遇到了一些问题。它一直显示16.我做错了什么? 这是变量timeStamp的代码:
Calendar.getInstance(TimeZone.getTimeZone("EST"));
this.timeStamp = ((Calendar.getInstance().get(Calendar.MONTH + 1)) + "/"
+ (Calendar.getInstance().get(Calendar.DAY_OF_MONTH)) + "/"
+ (Calendar.getInstance().get(Calendar.YEAR)) + " " + (Calendar.getInstance().get(Calendar.HOUR)) + ":"
+ (Calendar.getInstance().get(Calendar.MINUTE)) + ":" + (Calendar.getInstance().get(Calendar.AM_PM)));
答案 0 :(得分:2)
Calendar.MONTH
是一个不透明的"表示日期的月份字段的符号常量。术语"不透明"这意味着您不打算知道或依赖于实际值,它是Calendar类内部使用的编码幻数。添加1是没有意义的(详见下文)。
你真正的意思是
(Calendar.getInstance().get(Calendar.MONTH) + 1) + "/"
(注意括号的位置)将月份值从零原点转换为1原点。
正如@Pillar在评论中指出的那样,代码还有其他问题,但这就是你问过的问题。
幕后发生了什么:Calendar.MONTH
的值为2
,但这不是有用的信息。它只是一个内部索引,告诉Calendar
对象返回月份数。在下一个版本(甚至是下一个更新版本)中,此值可能会更改为完全不同的值。
您要求API返回3
索引的值。事实证明,值3
对应Calendar.WEEK_OF_YEAR
,因此您的查询返回当前周数。在下一次JDK更新之后,如果值3
不再对应于有效索引,它可能返回不同的内容,甚至可能抛出异常。
在实践中,由于向后兼容性问题,这些值不会发生变化,但这并不意味着您可以依赖始终具有相同值的符号。