2011年网易有道难题练习赛第二题Unix时间

     今天晚上做网易有道难题的练习赛,第二题是一个计算时间的,题目如下:

     
 我就直接用java 的API Calendar类中,开先居然把1s=60ms,悲剧啊,注意1s=1000ms。

查看了API,Calendar类可以用了这个setTimeZone(TimeZone value)函数设置时区,setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")) ,但是悲剧的事情又发生了(纠正:题目中的unix时间采用的是UTC时间格式,而Calendar类的getInstance获得的实例,已经本地化了,即北京时间,而北京时间是比UTC的早8个小时(可以通过TimeZone.getRawOffset()获得一个偏移量),所以我们应该使用TimeZone.getTimeZone("GTM-8"),GTM-8是和UTC一样的,这样也能解决问题,或者在时间上面减去这个偏移量,那么通过Calendar也能得到一个正确的时间)还是不行啊,可能是我的环境的问题吧,或者是rp值不够高,唉。。。同学提醒了我说有C#里面有直接计算时间的函数,于是再一次查看API发现Calendar有个add方法可以,于是就用它了add(int field, int amount) ,这个函数你把amount设置成负数就是减了,呵呵!而且内部会进行,前面的年、月、日的调整,比自己手动减8个小时方便多了,java的Calendar类真是太强大了,Date正逐步的被淘汰,呵呵!

删掉的方法也能解决问题的,不过应该不是这题的考核点。

知识点补充:

UTC是协调世界时(Universal Time Coordinated)英文缩写,是由国际无线电咨询委员会规定和推荐,
并由国际时间局(BIH)负责保持的以秒为基础的时间标度。UTC相当于本初子午线(即经度0度)上的平均太阳时,
过去曾用格林威治平均时(GMT)来表示.北京时间比UTC时间早8小时,以1999年1月1日0000UTC为例,UTC时间是零点,
北京时间为1999年1月1日早上8点整。 



   上面是我在做题的时候发现的,希望能帮到不知道的朋友们!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值