2016-03-21 17 views
0

ich die aktuelle Zeit in Millisekunden wieZeitstempel sorgt für zusätzliche Tage

(System.currentTimeMillis()/1000) 

in Zeile bekommen Ich benutze es:

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

und fügen Sie mit ein bis zwei Wochen statisch Ints

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

Wenn ich versuche, dies später in Tage zu verwandeln, ist es um 16 oder 17 Tage voraus (idk, wenn es Millisekunden eines Tages als Tag zählt)

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

Warum ist die Inkonsistenz in der Zeit? Ist es eine Long- oder String-Konvertierung?

+0

Wenn Sie 7 als Ausgabe erhalten möchten, dann verwenden Sie System.currentTimeMillis überhaupt nicht, nehmen Sie einfach Ihre Konstante für Millisekunden in einer Woche und stellen Sie diese später wieder her. –

Antwort

3

von System.currentTimeMillis()/1000 erhalten Sie Sekunden, nicht Millisekunden. So Sie Code richtig funktioniert, sollten Sie entweder geeignete Konstanten verwenden:

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) 

oder nicht teilen durch 1000

BTW, dies behandelt nicht möglich Tageslicht Uhr Änderungen zu speichern, aber ich glaube, es ist hier nicht so wichtig.

Verwandte Themen