public static String castToString(DateTime dt, int format) {
    if (format == DateTimeFormat_W3_dateTime) /* Format as schema dateTime */ {
      return dt.toString();
    }
    if (format == DateTimeFormat_W3_date) /* Format as schema date */ {
      return dt.toDateString(true);
    }
    if (format == DateTimeFormat_W3_time) /* Format as schema time */ {
      return dt.toTimeString();
    }
    if (format == DateTimeFormat_W3_gYear) /* Format as schema gYear */ {
      String result = "";
      int year = dt.getYear();
      if (year < 0) {
        result += '-';
        year = -year;
      }

      result += formatNumber(year, 4);
      if (dt.hasTimezone() != CalendarBase.TZ_MISSING)
        result = formatTimezone(dt.getTimezoneOffset());
      return result;
    }
    if (format == DateTimeFormat_W3_gYearMonth) /* Format as schema gYearMonth */ {
      String result = "";
      int year = dt.getYear();
      int month = dt.getMonth();
      if (year < 0) {
        result += '-';
        year = -year;
      }

      result += formatNumber(year, 4);
      result += '-';
      result += formatNumber(month, 2);
      if (dt.hasTimezone() != CalendarBase.TZ_MISSING)
        result += formatTimezone(dt.getTimezoneOffset());
      return result;
    }
    if (format == DateTimeFormat_W3_gMonth) /* Format as schema gMonth */ {
      String result = "--";
      int month = dt.getMonth();
      result += formatNumber(month, 2);
      if (dt.hasTimezone() != CalendarBase.TZ_MISSING) formatTimezone(dt.getTimezoneOffset());
      return result;
    }
    if (format == DateTimeFormat_W3_gMonthDay) /* Format as schema gMonthDay */ {
      String result = "--";
      int month = dt.getMonth();
      int day = dt.getDay();
      result += formatNumber(month, 2);
      result += '-';
      result += formatNumber(day, 2);
      if (dt.hasTimezone() != CalendarBase.TZ_MISSING)
        result += formatTimezone(dt.getTimezoneOffset());
      return result;
    }
    if (format == DateTimeFormat_W3_gDay) /* Format as schema gDay */ {
      String result = "---";
      int day = dt.getDay();
      result += formatNumber(day, 2);
      if (dt.hasTimezone() != CalendarBase.TZ_MISSING)
        result += formatTimezone(dt.getTimezoneOffset());
      return result;
    }
    if (format
        == DateTimeFormat_S_DateTime) /* Format as standard DateTime "YYYY-MM-DD HH:MM:SS" */ {
      StringBuffer s = new StringBuffer();
      s.append(dt.toDateString());
      s.append(" ");
      s.append(dt.toTimeString());
      return s.toString();
    }
    if (format == DateTimeFormat_S_Seconds) /* Format as number of seconds since epoch */ {
      String result = "";
      long milliseconds = dt.getTimeValue();
      if (milliseconds < 0) {
        result += '-';
        milliseconds = -milliseconds;
      }
      result += formatNumber(milliseconds / 1000, 1);
      result += formatFraction(milliseconds % 1000, 7);
      if (dt.hasTimezone() != CalendarBase.TZ_MISSING)
        result += formatTimezone(dt.getTimezoneOffset());
      return result;
    }
    if (format == DateTimeFormat_S_Days) /* Format as number of days since epoch */ {
      String result = "";
      long milliseconds = dt.getTimeValue();
      if (milliseconds < 0) {
        result += '-';
        milliseconds = -milliseconds;
      }
      result += formatNumber(milliseconds / (86400 * 1000), 1);
      result += formatFraction(milliseconds % (86400 * 1000), 7);
      if (dt.hasTimezone() != CalendarBase.TZ_MISSING)
        result += formatTimezone(dt.getTimezoneOffset());
      return result;
    }

    throw new IllegalArgumentException("Unsupported datetime format.");
  }