Re: Wrong result from System.currentTimeMillis()
<alberto.poz@gmail.com> wrote:
As I said both system clock and TZ appear to be correct .
That's what this code fragment produces:
TimeZone tz1 = TimeZone.getDefault();
System.out.println(tz1.getDisplayName());
System.out.println(System.getProperty( "user.timezone" ));
System.out.println(new Date());
Central European Time
Europe/Rome
Fri Jan 04 09:22:36 CET 2008
While the OS date command produces:
Fri Jan 4 08:22:48 Europe/Rome 2008
Let's run a more complete test - I want to see TZ offsets and actual
epoch values (which are timezone-agnostic). I suspect something's
wrong with your timezone definition either in the VM or in the OS.
For the OS (assuming GNU date):
date +%s # seconds since epoch
date +%c # formatted local date
date "+%Z (%z)" # timezone info
for the VM:
import java.util.*;
import java.text.*;
import java.io.*;
public class PrintTime {
public static void main(String[] args) {
PrintStream out = System.out;
long now = System.currentTimeMillis();
Date nowD = new Date(now);
TimeZone tz = TimeZone.getDefault();
out.println("TZ id: " + tz.getID());
out.println("TZ name: " + tz.getDisplayName());
out.println("TZ short no-DST name: " + tz.getDisplayName(false,
TimeZone.SHORT));
out.println("TZ short DST name: " + tz.getDisplayName(true,
TimeZone.SHORT));
out.println("TZ offset (mins): " + tz.getOffset(now) / (60 * 1000));
out.println("TZ uses DST: " + tz.useDaylightTime());
out.println("TZ in DST now: " + tz.inDaylightTime(nowD));
out.println("TZ DST savings (mins): " +
tz.getDSTSavings() / (60 * 1000));
out.println();
out.println("seconds since epoch: " + now / 1000);
out.println("Date toString: " + nowD);
out.println("SDF: " + new SimpleDateFormat("d MMM yyyy HH:mm:ss z(Z)").
format(nowD));
}
}
--
Mark Rafn dagon@dagon.net <http://www.dagon.net/>