/**
   * Returns multiple values of year, month, day and day of week for <code>date</code> in <code>
   * timezone</code>. <code>timezone</code> is the number of hours added to UTC to get local time.
   * It is in the range -12.0 to +14.0 where UTC is zone 0.0
   *
   * @param timezone
   * @param MV_returnarray
   * @return int
   */
  public int getCalendarDate(double timezone, Object[] MV_returnarray) {
    {
      CalendarDate date = this;

      if (timezone == Stella.NULL_FLOAT) {
        Stella.STANDARD_WARNING.nativeStream.println(
            "Warning: Timezone not specified in GET-CALENDAR-DATE  Using local zone.");
        {
          int year = Stella.NULL_INTEGER;
          int month = Stella.NULL_INTEGER;
          int day = Stella.NULL_INTEGER;
          Keyword dow = null;

          {
            Object[] caller_MV_returnarray = new Object[3];

            year =
                Stella.computeCalendarDate(
                    Stella.modifiedJulianDayToJulianDay(date.modifiedJulianDay),
                    caller_MV_returnarray);
            month = ((int) (((IntegerWrapper) (caller_MV_returnarray[0])).wrapperValue));
            day = ((int) (((IntegerWrapper) (caller_MV_returnarray[1])).wrapperValue));
            dow = ((Keyword) (caller_MV_returnarray[2]));
          }
          dow = dow;
          timezone = Stella.getLocalTimeZoneForDate(year, month, day, 12, 0, 0);
        }
      }
      {
        int time = date.timeMillis;
        int timezoneAdjustedTime = ((int) (time + (timezone * Stella.MILLIS_PER_HOUR)));
        int dayOffset = 0;

        if (timezoneAdjustedTime < 0) {
          dayOffset = -1;
        } else if (timezoneAdjustedTime > Stella.MILLIS_PER_DAY) {
          dayOffset = 1;
        } else {
        }
        return (Stella.computeCalendarDate(
            Stella.modifiedJulianDayToJulianDay(date.modifiedJulianDay + dayOffset),
            MV_returnarray));
      }
    }
  }
  /**
   * Returns multiple values of hours, minutes, seconds, milliseconds for the calendar date <code>
   * date</code> in <code>timezone</code>. <code>timezone</code> is the number of hours added to UTC
   * to get local time. It is in the range -12.0 to +14.0 where UTC is zone 0.0
   *
   * @param timezone
   * @param MV_returnarray
   * @return int
   */
  public int getTime(double timezone, Object[] MV_returnarray) {
    {
      CalendarDate date = this;

      if (timezone == Stella.NULL_FLOAT) {
        Stella.STANDARD_WARNING.nativeStream.println(
            "Warning: Timezone not specified in GET-TIME.  Using local zone.");
        {
          int year = Stella.NULL_INTEGER;
          int month = Stella.NULL_INTEGER;
          int day = Stella.NULL_INTEGER;
          Keyword dow = null;

          {
            Object[] caller_MV_returnarray = new Object[3];

            year =
                Stella.computeCalendarDate(
                    Stella.modifiedJulianDayToJulianDay(date.modifiedJulianDay),
                    caller_MV_returnarray);
            month = ((int) (((IntegerWrapper) (caller_MV_returnarray[0])).wrapperValue));
            day = ((int) (((IntegerWrapper) (caller_MV_returnarray[1])).wrapperValue));
            dow = ((Keyword) (caller_MV_returnarray[2]));
          }
          dow = dow;
          timezone = Stella.getLocalTimeZoneForDate(year, month, day, 12, 0, 0);
        }
      }
      if (timezone == 0.0) {
        return (Stella.decodeTimeInMillis(date.timeMillis, MV_returnarray));
      } else if (timezone < 0.0) {
        return (Stella.decodeTimeInMillis(
            ((((int)
                    (date.timeMillis
                        + Stella.MILLIS_PER_DAY
                        + (timezone * Stella.MILLIS_PER_HOUR))))
                % Stella.MILLIS_PER_DAY),
            MV_returnarray));
      } else {
        return (Stella.decodeTimeInMillis(
            ((((int) (date.timeMillis + (timezone * Stella.MILLIS_PER_HOUR))))
                % Stella.MILLIS_PER_DAY),
            MV_returnarray));
      }
    }
  }