TimeZone timeZone = null;
try {
timeZone = TimeZone.getTimeZone("GMT") ;// #1
//timeZone = TimeZone.getDefault();;// #2
} catch (Exception e) {
}
Calendar gc = GregorianCalendar.getInstance(timeZone);
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:MM:SS").format(gc.getTime()));
怎么用#1和#2的timeZone,输出的时间都是一样的呢???

解决方案 »

  1.   

    打印格式应该是小写mm和ss:
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(gc.getTime()));时间不对是应为这个format也要设置时区:
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
    sdf.setTimeZone(timeZone);
      

  2.   

    //要么设置系统的timezone
    System.setProperty("user.timezone", "GTM");
    Calendar gc = GregorianCalendar.getInstance();
    //System.out.printf("%tF %tT", gc.getTime(), gc.getTime());
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:MM:SS").format(gc.getTime()));//要么像1L说的,打印的时候也设置timezone
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ; //因为这里的SimpeDateFormat对象也有自己的timezone
    sdf.setTimeZone(timeZone);
    System.out.println(sdf.format(gc.getTime()));
      

  3.   

    SimpleDateFormat 怎么不缺省依赖于Calendar的时区呢?
      

  4.   

    因为SimpleDateFormat内部拥有一个Calendar对象TimeZone timeZone = null;
    try {
        timeZone = TimeZone.getTimeZone("GMT") ;// #1
        //timeZone = TimeZone.getDefault();;// #2
    } catch (Exception e) {
    }
    Calendar gc = GregorianCalendar.getInstance(timeZone);
    System.out.println(gc.getTimeZone()); //外部calendar的timezone
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:MM:SS");
    Calendar c = sdf.getCalendar(); //内部calendar
    System.out.println(c.getTimeZone()); //内部calendar的timezone
    //sdf.setCalendar(gc); //改变内部calendar也可以
    sdf.setTimeZone(timeZone); //改变内部calendar的timezone
    System.out.println(sdf.format(gc.getTime()));
    System.out.println(sdf.format(sdf.getCalendar().getTime()));如果想外部的Calendar和SimpeDateFormat的内部的Calendar的timezone自动一致,那么就是设置系统timezone,以统一所有的timezone

    System.setProperty("user.timezone", "GTM");