void Date_convertToTimeZone_(Date *self, struct timezone tz) { double s = Date_asSeconds(self) + ((self->tz.tz_minuteswest - tz.tz_minuteswest) * 60); Date_fromSeconds_(self, s); Date_setTimeZone_(self, tz); }
void Date_convertToTimeZone_(Date *self, struct timezone tz) { double s = Date_asSeconds(self) + 60*(self->tz.tz_minuteswest - (self->tz.tz_dsttime ? 60 : 0)) - 60*(tz.tz_minuteswest - (tz.tz_dsttime ? 60 : 0)); Date_fromSeconds_(self, s); Date_setTimeZone_(self, tz); }
IO_METHOD(IoDate, setGmtOffset) { /*doc Date setGmtOffset Set the number of minutes west of GMT for this Date's zone */ struct timezone tz = Date_timeZone(DATA(self)); tz.tz_minuteswest = IoMessage_locals_intArgAt_(m, locals, 0); Date_setTimeZone_(DATA(self), tz); IoObject_isDirty_(self, 1); return self; }
IO_METHOD(IoDate, setToUTC) { /*doc Date asUTC Changes the timezone of this date to utc */ struct timezone tz; tz.tz_minuteswest = 0; tz.tz_dsttime = 0; Date_setTimeZone_(DATA(self), tz); IoObject_isDirty_(self, 1); return self; }