Android/Java – Calculate date difference shows different results

public long getDays(){
    Date today = new Date ( );
    Calendar cal = Calendar.getInstance (TimeZone.getTimeZone("GMT"));
    // Set as today
    cal.setTime ( today );
    System.out.println ( "Today Cal: "+cal.get ( Calendar.YEAR ) + "Y / " + ( cal.get ( Calendar.MONTH ) + 1 ) + "M / " + cal.get ( Calendar.DATE ) + " D" );
    Calendar cal2 = Calendar.getInstance (TimeZone.getTimeZone("GMT") );
   //Month has offset -1. June = 5
    cal2.set ( 2011, 5, 15 );//YY MM DD
    System.out.println ( "Start Day Cal2: "+cal2.get ( Calendar.YEAR ) + "Y / " + ( cal2.get ( Calendar.MONTH ) + 1 ) + "M / " + cal2.get ( Calendar.DATE ) + " D" );

    long count = 0;
    while ( !cal2.after ( cal ) ) {
        count++;
        //increment date
        cal2.add ( Calendar.DATE, 1 );
    }
    System.out.println ( "Ending Cal2: "+cal2.get ( Calendar.YEAR ) + "Y / " + ( cal2.get ( Calendar.MONTH ) + 1 ) + "M / " + cal2.get ( Calendar.DATE ) + " D" );

    return count;
}

This is the code that I am using to calculate difference in Days between today and 2011 June 15th.

This always works on Eclipse IDE, but when I implement this on Android, it shows 2 different results by random chance.

Screenshot

Most of the times it shows 2405, but sometimes it shows 2406
(Although the date should not have changed as it is 3am in UK now.)

Console output

This is what is shown on System.out.println.
It has the same start date and end date, but by a random chance, while loop counts 1 extra. How?

It only happens on Android.
This is the code showing how the textview is being updated as widget, if it helps.

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

    final int count = appWidgetIds.length;
//Set Date Text
        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.haruhi_widget);
        long days=getDays();
        remoteViews.setTextViewText(R.id.textView, days+context.getString(R.string.days));
//Set ImageView
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inScaled = false;
    Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.haruhi1,options);
    remoteViews.setImageViewBitmap(R.id.imageView,bitmap);

    Intent intent = new Intent(context, HaruhiWidgetProvider.class);
    intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
    remoteViews.setOnClickPendingIntent(R.id.imageView, getPendingSelfIntent(context, KYON_KUN_DENWA));

    for (int i = 0; i < count; i++) {
      //  System.out.println(count+"appWidgetIds[i]");
        int widgetId = appWidgetIds[i];
        appWidgetManager.updateAppWidget(widgetId, remoteViews);
    }
}