我已经在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;
}
我用于测试的值:
分钟: 00
返回值:1462406419(2016年5月5日星期四00:00:19 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。
答案 0 :(得分:2)
首先,Calendar.getInstance();
将返回一个Calendar实例,其时区设置为默认时区,很可能不是 GMT。
使用cal.set(year, month, day, hour, minute);
,您可以保持日历的第二个和毫秒字段不变(它们保留当前值),因此如果您在x:y:19点运行测试(x和y是任意值),将小时字段设置为21并将分钟字段设置为0后,日历的时间仍为21:00:19。