Java将unix时间转换为日期,给出错误的结果

时间:2012-03-29 09:08:14

标签: java date unix-timestamp

我试图将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

2 个答案:

答案 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*1000timestamp转换为long值( 已经是long值),然后自动将1000扩展为long值以执行乘法运算。< / p>

    我会完全跳过转化(long),如果您想明确说明因素是长值,请改用1000L,这是一个长文字。