<alberto....@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    da...@dagon.net    <http://www.dagon.net/>