RSExport void RSCalendarSetGregorianStartDate(RSCalendarRef calendar, RSDateRef date) { RS_OBJC_FUNCDISPATCHV(RSCalendarGetTypeID(), void, calendar, _setGregorianStartDate:date); __RSGenericValidInstance(calendar, RSCalendarGetTypeID()); if (date) __RSGenericValidInstance(date, RSDateGetTypeID()); if (!calendar->_cal) __RSCalendarSetupCal(calendar); if (!calendar->_cal) return; if (!date) { UErrorCode status = U_ZERO_ERROR; UCalendar *cal = __RSCalendarCreateUCalendar(calendar->_identifier, calendar->_tz); UDate udate = cal ? ucal_getGregorianChange(cal, &status) : 0; if (cal && U_SUCCESS(status)) { status = U_ZERO_ERROR; if (calendar->_cal) ucal_setGregorianChange(calendar->_cal, udate, &status); } if (cal) ucal_close(cal); } else { RSAbsoluteTime at = RSDateGetAbsoluteTime(date); UDate udate = (at + RSAbsoluteTimeIntervalSince1970) * 1000.0; UErrorCode status = U_ZERO_ERROR; if (calendar->_cal) ucal_setGregorianChange(calendar->_cal, udate, &status); } }
RSExport RSUInteger RSDateGetDayOfWeek(RSDateRef date) { __RSDateAvailable(date); RSGregorianDate gd = RSAbsoluteTimeGetGregorianDate(RSDateGetAbsoluteTime(date), nil); return __RSDateGetDayOfWeek(gd.year, gd.month, gd.day); }
static RSTypeRef __RSDateClassCopy(RSAllocatorRef allocator, RSTypeRef rs, BOOL mutableCopy) { RSAbsoluteTime time = RSDateGetAbsoluteTime(rs); RSDateRef copy = RSDateCreate(allocator, time); return copy; }