2016-03-21 5 views
0

я получить текущее время в миллисекундах, какОтметка добавляет дополнительные дни

(System.currentTimeMillis()/1000) 

в строке я использую его:

foodObj.setValue("expires",(System.currentTimeMillis()/1000)+ONE_WEEK+""); 

и добавить одну или две недели с помощью статических Интс

public static int TWO_WEEKS = 1209600000; 
public static int ONE_WEEK = 604800000; 
public static int ONE_DAY = 86400000; 

Когда я попытаюсь позже превратить это в несколько дней вперед, я думаю, что 16 или 17 дней (idk, если он насчитывает миллисекунды дня в день)

//keysValues.get("expires") contains the timestamp 
Long exp= Long.parseLong(keysValues.get("expires")); 
long days=TimeUnit.MILLISECONDS.toDays(exp)-16;//otherwise this is 23 

Почему существует непоследовательность во времени? Это длинная или струнная конверсия?

+0

Если вы хотите получить 7 в качестве вывода, тогда вообще не используйте System.currentTimeMillis, просто возьмите свою константу за миллисекунды за одну неделю и восстановите ее позже. –

ответ

3

К System.currentTimeMillis()/1000 вы получаете секунд, а не миллисекунды. Таким образом, чтобы сделать вас код работать должным образом, вы должны либо использовать соответствующие константы:

public static final int ONE_DAY = 24 * 60 * 60; // 86400, not 86.4M 
public static final int ONE_WEEK = ONE_DAY * 7; 
public static final int TWO_WEEKS = ONE_WEEK * 2; 

// ... 
long days = TimeUnit.SECONDS.toDays(exp) 

или нет деления на 1000.

BTW, это не обрабатывает возможное летнее изменения тактовой частоты, но я верю в это здесь не так важно.