我试图将unixtime转换为日期,但结果我得到的是错误的:
例如,我有这个unixtime:1354312800到这个网站:
enter link description here
结果是:
星期五,2012年11月30日22:00:00 GMT
但是当我这样做时:
long timestamp = 1354312800;
java.util.Date time=new java.util.Date((long)timestamp*1000);
int d = time.getDay();
int m = time.getMonth();
我得到:
d = 6 <<这个错误应该是30。
和m - 11
答案 0 :(得分:4)
getDay()
错误getDate()
。
getDay Javadoc:
返回此日期所代表的星期几。返回值(0 =星期日,1 =星期一,2 =星期二,3 =星期三,4 =星期四,5 =星期五,6 =星期六)表示包含或以此时间表示的时刻开始的星期几日期对象,在本地时区中解释。
所以只需使用getDate()
代替getDay()
有关详情,请查看javadoc:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html
如果您的时间仍然与您尝试的Unix时间不同,那么您可能不在GMT时区,因此您需要找出相应时区的日期:
SimpleDateFormat df = new SimpleDateFormat();
df.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(df.format(time));
即使您的本地tiemzone与GMT
不同,这也可以为您提供预期的输出答案 1 :(得分:2)
方法Date.getDay()
给出周的日期(0 =星期日,...,6 =星期六)。
将其更改为Date.getDate()
,结果会得到30
。
一些旁注:
Date
类几乎已被弃用。使用Calendar
代替,甚至更好地使用Joda time library。
你的转换很有趣。 (long)timestamp*1000
将timestamp
转换为long值( 已经是long值),然后自动将1000
扩展为long值以执行乘法运算。< / p>
我会完全跳过转化(long)
,如果您想明确说明因素是长值,请改用1000L
,这是一个长文字。