Android UnixTime错误解析

时间:2016-04-12 15:36:40

标签: java android

我已经在StackOverflow中阅读了很多主题,我无法弄清楚我做错了什么(不使用整数并乘以1000)。

这是我的方法:

public long toUnixTime() {
    Calendar cal = Calendar.getInstance();
    cal.set(year, month, day, hour, minute);
    Long aux = cal.getTimeInMillis();
    Long aux2 = 1000L;
    return aux / aux2;
}

我用于测试的值:

  • 日: 04
  • 月: 03(基于0,所以4月)
  • 年: 2016
  • 小时: 21
  • 分钟: 00

  • 返回值:1462406419(2016年5月5日星期四00:00:19 GMT)

  • 预期价值:1459803600(2016年4月4日星期一21:00:00 GMT)

这让我发疯了

解决方案

public long toUnixTime() {
    Calendar cal = Calendar.getInstance();
    cal.set(year, month-1, day, hour, minute, 0);
    cal.setTimeZone(TimeZone.getTimeZone("GMT"));
    return cal.getTimeInMillis() / 1000;
}

month-1 = 0-based,所以如果是1月,我应该使用0。

1 个答案:

答案 0 :(得分:2)

首先,Calendar.getInstance();将返回一个Calendar实例,其时区设置为默认时区,很可能不是 GMT。

使用cal.set(year, month, day, hour, minute);,您可以保持日历的第二个和毫秒字段不变(它们保留当前值),因此如果您在x:y:19点运行测试(x和y是任意值),将小时字段设置为21并将分钟字段设置为0后,日历的时间仍为21:00:19。