title: Android java.util.Calendar - Time Difference
body: <p>I want to make calendar view in order to support touch interaction.
  So I'd like to build new custom calendar view. 
  I tried to make mapping function between view offset and real date value.</p>
  
  <p>Here is my idea:
  If I can compute the number of weeks since base date(in my case, 1989-12-31),
  it is easy to know offset. HEIGHT_FOR_WEEK * NUM_OF_WEEK is very simple computation
  to know exact offset.</p>
  
  <p>My problem is this:
  First I got milliseconds value from base date. And I set the milliseconds to
  another calendar object. I expected same date from that object. But actually 
  it was different date.</p>
  
  <pre><code>mBaseDateInMillis = mBaseDate.getTimeInMillis();
  mAnotherDate.setTimeInMillis(mBaseDateInMillis);
  /* I expect mBaseDate == mAnotherDate.
   * but it was different.
   */ 
  </code></pre>
  
  <p>Here is my code:</p>
  
  <pre><code>public class CalendarCoordinate {
      public static final long ONEWEEK_IN_MILLISECONDS = 60 * 60 * 24 * 7 * 1000;
      public Calendar mBaseDate = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
      public long mBaseDateInMillis = 0;
      public Calendar mDate = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
      public int  mWeekHeight = 30;
  
      /**
       * CTOR
       */
      public CalendarCoordinate() {
          /* Base date is 1989-12-31 0, 0, 0
           * It was Sunday and offset 0 will be mapped onto this day.
           */
          mBaseDate.set(Calendar.MILLISECOND, 0);
          mBaseDate.set(1989, 12, 31, 0, 0, 0);
          mBaseDateInMillis = mBaseDate.getTimeInMillis();
          Log.v(TAG, "BaseDate:" + mBaseDate.toString());
      }
  
      /**
       * Compute DATE from Y-Offset
       * @param yOffset
       * @return
       */
       public Calendar dateFromYOffset(int yOffset) {
          long nthWeeks = yOffset / mWeekHeight;
          long millsSinceBaseDate = nthWeeks * ONEWEEK_IN_MILLISECONDS;
          mDate.clear();
          mDate.set(Calendar.MILLISECOND, 0);
          mDate.setTimeInMillis(mBaseDateInMillis + millsSinceBaseDate);
  
          /* We SHOULD call to update mDate internal data structure. 
           * Java is really strange for this thing
           **/
          mDate.getTimeInMillis();
          return mDate;
      }
  
      /**
       * Compute Y-Offset from DATE
       * @param date
       * @return
       */
      public long yOffsetFromDate(Calendar cal) {
          long mills = cal.getTimeInMillis();
          long nthWeeks = (mills - mBaseDateInMillis)/ONEWEEK_IN_MILLISECONDS;
          return nthWeeks * mWeekHeight;
      }
  }
  </code></pre>
  
  <p>Anybody can help me? I'm not a good Java programmer.</p>