Java >> Java Program >  >> Java

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


Java-tagg