java.util.calendar - > Calendar.add()vs夏令时

时间:2012-12-05 18:57:41

标签: time calendar save dst

我的服务器设置为' America / Sao_Paulo' TimeZone,今年10月21日,夏令时开始了。

为什么我这样做

public static void main(String[] args){

    Calendar d1 = new GregorianCalendar(2012, 9, 19, 0, 0, 0);

    Calendar d2 = new GregorianCalendar(2012, 9, 22, 0, 0, 0);

    while(d1.compareTo(d2) <= 0){
        System.out.println("\nBEFORE: " + d1.getTime());
        d1.add(Calendar.DAY_OF_MONTH, 1);
        System.out.println("AFTER: " + d1.getTime());
    }


}

我有这个输出

BEFORE:Fri Oct 19 00:00:00 BRT 2012

AFTER:10月20日星期六00:00:00 BRT 2012

之前:星期六20月20日00:00:00 BRT 2012

AFTER:Sun Oct 21 01:00:00 BRST 2012

BEFORE:Sun Oct 21 01:00:00 BRST 2012

AFTER:Mon Oct 22 01:00:00 BRST 2012

当我这样做 d1.add(Calendar.DAY_OF_MONTH,1)时,这一天也应该增加而不是小时,对吗?我怎么能避免这种情况,并保持原来的小时,我不想使用GMT-3,我现在需要什么时候才是DST。

thanksss

1 个答案:

答案 0 :(得分:0)

由于Sao_paulo在过渡日21日没有午夜,因此21日将从凌晨1点开始。对于第22天,你添加一天,然后它保持凌晨1点,依此类推。为了使它正确,你应该增加19日的天数,而不是前一天的计算。