今天晚上做网易有道难题的练习赛,第二题是一个计算时间的,题目如下:
描述 在著名的unix系统中,使用了一种简洁高效的时间表示方法,即: 将1970年1月1日0点作为“unix纪元”的原点,从1970年1月1日开始经过的秒数存储为一个32位整数 请编写一个程序,帮助把一个unix时间辍,转换成形如"YYYY-mm-dd HH:ii:ss"的格式,其中的字母分别代表 YYYY 4 位数字完整表示的年份 mm 数字表示的月份,有前导零的 2 位数字 dd 月份中的第几天,有前导零的2位数字 HH 小时,24 小时格式,有前导零 ii 有前导零的分钟数 ss 秒数,有前导零 输入 输入数据有若干行,每行包含一个整数t,(0<=t<2^31) 输出 对每一行输入数据,输出一行,为形如“YYYY-mm-dd HH:ii:ss”格式的时间 样例输入 10 1234567890 样例输出 1970-01-01 00:00:10 2009-02-13 23:31:30 我就直接用java 的API Calendar类中,开先居然把1s=60ms,悲剧啊,注意1s=1000ms,而且后来才发现,用setTimeInMillis(long time),多了8个小时,用Date类一样的,于是在网上搜了下,这个是时区的问题,郁闷。。。。于是收到了一篇文章这样写道: -Duser.timezone=Asia/Shanghai 设置上面的参数就没问题了,但是这是比赛啊,大哥我怎么能设置环境啊,于是查看了API,用了这个setTimeZone(TimeZonevalue) 函数设置,setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")) ,但是悲剧的事情又发生了,还是不行啊,可能是我的环境的问题吧,或者是rp值不够高,唉。。。同学提醒了我说有C#里面有直接计算时间的函数,于是再一次查看API发现Calendar有个add方法可以,于是就用它了add(intfield, intamount) ,这个函数你把amount设置成负数就是减了,呵呵!而且内部会进行,前面的年、月、日的调整,比自己手动减8个小时方便多了,java的Calendar类真是太强大了,Date正逐步的被淘汰,呵呵!上面是我在做题的时候发现的,希望能帮到不知道的朋友们!