【问题标题】:Java Convert unixtime to date , giving wrong resultsJava将unixtime转换为日期,给出错误的结果
【发布时间】:2012-03-29 09:08:13
【问题描述】:

我试图将 unixtime 转换为日期,但我得到的结果是错误的: 例如,我有这个 unixtime : 1354312800 根据这个网站:
enter link description here
结果是:
格林威治标准时间 2012 年 11 月 30 日星期五 22:00:00

但是当我这样做的时候:

long timestamp = 1354312800;
java.util.Date time=new java.util.Date((long)timestamp*1000);
int d = time.getDay();
int m = time.getMonth();

我得到: d= 6
和 m - 11

【问题讨论】:

  • 通过根据答案更正原始帖子,您基本上使我们的答案无效(回滚):-)

标签: java date unix-timestamp


【解决方案1】:

你把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 而不是 30
  • 我已经更新了我的答案,包括您所在时区的详细信息。
  • 时区如何影响Date1354312800*1000对应的?
  • 因为时间是Fri, 30 Nov 2012 22:00:00 GMT,如果他住在例如GMT+4,这将是 12 月的第一天,所以 getDate 方法也将返回 1。
【解决方案2】:

方法Date.getDay() 给出星期(0 = 星期日,...,6 = 星期六)。

将其更改为Date.getDate(),您将得到30


一些旁注:

  • Date 类已被弃用。改用Calendar,甚至更好的是Joda time library

  • 您的转换有点有趣。 (long)timestamp*1000timestamp 转换为 long 值(已经是 long 值),然后自动将 1000 扩展为 long 值以执行乘法。

    我将完全跳过转换 (long) ,如果您想明确地说这些因子是长值,请改用 1000L ,这是一个长字面值。

【讨论】:

  • 怎么可能,我的电脑里结果是 1 而不是 30。 mybe与时区有关吗?
  • 哇。这真的很奇怪。 “当前时间”不参与计算。您是否粘贴了我发布的链接中的确切代码?
猜你喜欢
  • 2013-04-20
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多