时间问题

来源:互联网 发布:java sleep 单位 编辑:程序博客网 时间:2024/06/02 11:17
    最近在做Activity Recognition方面的研究,用到MIT的Dataset,里面的一条数据包括产生时间、传感器类型、传感器数值等信息。当我用他们所提供的一个解码程序decode这些数据时发生了一个很让人疑惑的问题——所有的long类型的时间解码出来的时间比它本身应该的时间推后了12个小时。一开始以为是他们程序的bug,并且很纳闷这么明显的bug怎么可能没有被debug,于是我给它添了两行代码,ok,一切搞定。可问题真的有这么简单吗?在取笑别人之前要先反思自己,是否是自己对情况的认识有偏差?
    就我遇到的这个问题,答案是肯定的——我忘记了还有时差问题。通过Calendar类从long类型的时间所获得的逻辑时间是时区相关的。MIT的TimeZone是US/Michigan,而Singapore则是Asia/Singapore,两个时区差了正好12个小时,这也就是为什么解码出现时间偏移的原因。将默认的时区设为US/Michigan,一切搞定。
    另一个时间的问题我至今还没有搞明白,就是GregorianCalendar的构造函数的参数。其中的GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)含义很直白,但一个很奇怪的是month参数似乎是从0算起的,而其它都是从1算起,不知道是不是又是我哪里的问题,暂时留在这,以后查证。现在认为的一个可能是,其它参数都是传递数值,而month则是一个枚举,枚举的默认int值是从0开始算起,这可能是问题的根源,但这样让人迷惑的API设计出现在Java类库里实在不太应该。
原创粉丝点击