如何获取timeStamp变量以显示正确的日期?

时间:2016-04-13 23:40:50

标签: java

所以我在让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)));

1 个答案:

答案 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不再对应于有效索引,它可能返回不同的内容,甚至可能抛出异常。

在实践中,由于向后兼容性问题,这些值不会发生变化,但这并不意味着您可以依赖始终具有相同值的符号。