Hello,

I've noticed that there is a strange behavior for the timezone 
"America/Sao_Paulo" concerning setting dates to midnight;
I've run the following code and I've gotten different results using 
java.util.Calendar and Joda:

    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR,2008);
        cal.setLenient(false);
        cal.set(Calendar.MONTH,Calendar.OCTOBER);
        cal.set(Calendar.DAY_OF_MONTH,17);
        
cal.set(Calendar.HOUR_OF_DAY,cal.getActualMinimum(Calendar.HOUR_OF_DAY));
        cal.set(Calendar.MINUTE,cal.getActualMinimum(Calendar.MINUTE));
        cal.set(Calendar.SECOND,cal.getActualMinimum(Calendar.SECOND));
        
cal.set(Calendar.MILLISECOND,cal.getActualMinimum(Calendar.MILLISECOND));

        System.out.println(System.getProperty("user.timezone") );
        System.out.println(cal.getTime());
        System.out.println(cal.getTimeInMillis());
        System.out.println(new DateMidnight(2008,10,17).getMillis());
        System.out.println(new 
DateTime(cal.getTimeInMillis()).withMillisOfDay(0).getMillis());
    }

output:
America/Sao_Paulo
Fri Oct 17 00:00:00 BRT 2008
1224212400000
1224208800000
1224208800000


I've also run the following code:
    public static void main(String[] args) {
        int dayOfMonth = 10;
        int limit = 25;

        System.out.println(System.getProperty("user.timezone"));
        System.out.println(System.getProperty("java.version"));
        System.out.println(System.getProperty("java.home"));

        for(; dayOfMonth< limit; dayOfMonth++){
            System.out.println(  "October " + dayOfMonth+ " 2008:");
            try{
                Calendar cal = Calendar.getInstance();
                cal.set(Calendar.YEAR,2008);    
                cal.set(Calendar.MONTH,Calendar.OCTOBER);
                cal.set(Calendar.DAY_OF_MONTH,dayOfMonth);
                
cal.set(Calendar.HOUR_OF_DAY,cal.getActualMinimum(Calendar.HOUR_OF_DAY));
                cal.set(Calendar.MINUTE,cal.getActualMinimum(Calendar.MINUTE));
                cal.set(Calendar.SECOND,cal.getActualMinimum(Calendar.SECOND));
                
cal.set(Calendar.MILLISECOND,cal.getActualMinimum(Calendar.MILLISECOND));
                System.out.println( "Calendar  : " +cal.getTimeInMillis()+" / " 
+ cal.getTime()+" / "+ cal.getTimeZone().getID());

            }catch(Exception e){
                System.out.println( "Calendar : " + e.getMessage()+" on 
dayOfMonth +" + dayOfMonth);
                continue;
            }

            try{
                DateMidnight time = new DateMidnight(new 
DateTime().withYear(2008).withMonthOfYear(10).withDayOfMonth(dayOfMonth));
                System.out.println( "Joda      : " + time.getMillis()+" / " + 
time.toDate()+" / " + time.getZone().getID());
            }catch(Exception e){
                System.out.println( "Joda : " + e.getMessage()+" on dayOfMonth 
$dayOfMonth");
                continue;
            }
         }
    }


output:

1.5.0_14
C:\Program Files\Java\jdk1.5.0_14\jre
October 10 2008:
Calendar  : 1223607600000 / Fri Oct 10 00:00:00 BRT 2008 / America/Sao_Paulo
Joda      : 1223607600000 / Fri Oct 10 00:00:00 BRT 2008 / America/Sao_Paulo
October 11 2008:
Calendar  : 1223694000000 / Sat Oct 11 00:00:00 BRT 2008 / America/Sao_Paulo
Joda      : 1223694000000 / Sat Oct 11 00:00:00 BRT 2008 / America/Sao_Paulo
October 12 2008:
Calendar  : 1223780400000 / Sun Oct 12 00:00:00 BRT 2008 / America/Sao_Paulo
Joda      : 1223780400000 / Sun Oct 12 00:00:00 BRT 2008 / America/Sao_Paulo
October 13 2008:
Calendar  : 1223866800000 / Mon Oct 13 00:00:00 BRT 2008 / America/Sao_Paulo
Joda      : 1223863200000 / Sun Oct 12 23:00:00 BRT 2008 / America/Sao_Paulo
October 14 2008:
Calendar  : 1223953200000 / Tue Oct 14 00:00:00 BRT 2008 / America/Sao_Paulo
Joda      : 1223949600000 / Mon Oct 13 23:00:00 BRT 2008 / America/Sao_Paulo
October 15 2008:
Calendar  : 1224039600000 / Wed Oct 15 00:00:00 BRT 2008 / America/Sao_Paulo
Joda      : 1224036000000 / Tue Oct 14 23:00:00 BRT 2008 / America/Sao_Paulo
October 16 2008:
Calendar  : 1224126000000 / Thu Oct 16 00:00:00 BRT 2008 / America/Sao_Paulo
Joda      : 1224122400000 / Wed Oct 15 23:00:00 BRT 2008 / America/Sao_Paulo
October 17 2008:
Calendar  : 1224212400000 / Fri Oct 17 00:00:00 BRT 2008 / America/Sao_Paulo
Joda      : 1224208800000 / Thu Oct 16 23:00:00 BRT 2008 / America/Sao_Paulo
October 18 2008:
Calendar  : 1224298800000 / Sat Oct 18 00:00:00 BRT 2008 / America/Sao_Paulo
Joda      : 1224295200000 / Fri Oct 17 23:00:00 BRT 2008 / America/Sao_Paulo
October 19 2008:
Calendar  : 1224385200000 / Sun Oct 19 01:00:00 BRST 2008 / America/Sao_Paulo
Joda      : 1224381600000 / Sat Oct 18 23:00:00 BRT 2008 / America/Sao_Paulo
October 20 2008:
Calendar  : 1224468000000 / Mon Oct 20 00:00:00 BRST 2008 / America/Sao_Paulo
Joda      : 1224468000000 / Mon Oct 20 00:00:00 BRST 2008 / America/Sao_Paulo
October 21 2008:
Calendar  : 1224554400000 / Tue Oct 21 00:00:00 BRST 2008 / America/Sao_Paulo
Joda      : 1224554400000 / Tue Oct 21 00:00:00 BRST 2008 / America/Sao_Paulo
October 22 2008:
Calendar  : 1224640800000 / Wed Oct 22 00:00:00 BRST 2008 / America/Sao_Paulo
Joda      : 1224640800000 / Wed Oct 22 00:00:00 BRST 2008 / America/Sao_Paulo
October 23 2008:
Calendar  : 1224727200000 / Thu Oct 23 00:00:00 BRST 2008 / America/Sao_Paulo
Joda      : 1224727200000 / Thu Oct 23 00:00:00 BRST 2008 / America/Sao_Paulo
October 24 2008:
Calendar  : 1224813600000 / Fri Oct 24 00:00:00 BRST 2008 / America/Sao_Paulo
Joda      : 1224813600000 / Fri Oct 24 00:00:00 BRST 2008 / America/Sao_Paulo

It seems that the divergence between dates start at October 13th and end at 
October 19th. I'm not sure if there's any relation to this matter, but October 
12th was one of the supposed days that Brazil would start using DST and it was 
postponed to October 19th, its official date. That said, it seems thta 
Calendar's output is the right one.

Any ideas as to why this is happening? I'm using joda 1.5.2 and I've updated 
the JVM with the most recent tzupdater patch, 1.3.9.

Thanks,
Fabio

_________________________________________________________________
Receba GRÁTIS as mensagens do Messenger no seu celular quando você estiver 
offline. Conheça  o MSN Mobile!
http://mobile.live.com/signup/signup2.aspx?lc=pt-br
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Joda-interest mailing list
Joda-interest@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/joda-interest

Reply via email to