2016-03-21 106 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天(如果它将一天中的毫秒数表示为一天),那么它会提前

//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划分,这不处理可能出现的夏令时钟的变化,但我相信它在这里并不重要。