时间问题

    最近在做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类库里实在不太应该。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值