Tidsförvirring, förtydligande behövs
Givet:
private Calendar calendarInstance = Calendar.getInstance(); public long inMillis() { calendarInstance.set(year, month, day, hour, min); return calendarInstance.getTimeInMillis(); }
Som jag förstår det kommer resultatet tillbaka med tiden sedan epok, i millisekunder
Den aktuella tiden som UTC millisekunder från epok.
Med tanke på att mitt test alltid ställer in objekten på samma sätt, varför kommer resultaten upp olika med tiden?
detailedMoment = new MomentInTime(2012, 11, 1, 19, 9); detailedMoment.inMillis() // gives different results as time passes by
UPPDATERING:
Jag fortsätter att andra gissa mig själv pga
För samma tidsperiod får jag
1_351_796_940 // http://www.epochconverter.com 1_354_410_540 // my number
Svar
Jag tycker att du ska använda clear(). Om du gör det kommer det att returnera dig det exakta antalet millisekunder varje gång.
public long inMillis() { calendarInstance.clear(); calendarInstance.set(year, month, day, hour, min); return calendarInstance.getTimeInMillis(); }
Från Java doc
Ställer in alla kalenderfältvärden och tidsvärdet (millisecond offset from the Epoch)
i denna kalender odefinierad. Det betyder att isSet() kommer att returnera false för alla kalenderfält, och datum- och tidsberäkningarna kommer att behandla fälten som om de aldrig hade ställts in. En kalenderimplementeringsklass kan använda sina specifika standardfältvärden för datum-/tidsberäkningar. Till exempel använder GregorianCalendar 1970
om fältet ÅR är odefinierat.
Ett exempelprogram
public class MomentInTime { private static Calendar calendarInstance = Calendar.getInstance(); public static long inMillis() { calendarInstance.clear(); calendarInstance.set(2012, 10, 1, 19, 9); return calendarInstance.getTimeInMillis(); } public static void main(String[] args) throws InterruptedException { for (int i = 0; i < 10; i++) { System.out.println(inMillis()/1000); Thread.sleep(300); } } }
Utdata:
1351777140