libidav/utils.c

changeset 793
3ed93d188375
parent 789
378b5ab86f77
child 794
29d544c3c2b8
equal deleted inserted replaced
792:4e4e5bbad164 793:3ed93d188375
136 } 136 }
137 val = atol(conv); 137 val = atol(conv);
138 tparts.tm_sec = val % 100; 138 tparts.tm_sec = val % 100;
139 tparts.tm_min = (val % 10000) / 100; 139 tparts.tm_min = (val % 10000) / 100;
140 tparts.tm_hour = val / 10000; 140 tparts.tm_hour = val / 10000;
141 tparts.tm_isdst = -1;
141 142
142 143
143 // parse time zone (if any) 144 // parse time zone (if any)
144 if(tzinfo.length == 0) { 145 if(tzinfo.length == 0) {
145 // local time 146 // local time
147 return mktime(&tparts); 148 return mktime(&tparts);
148 } else if(!cx_strcmp(tzinfo, cx_str("Z"))) { 149 } else if(!cx_strcmp(tzinfo, cx_str("Z"))) {
149 #if defined(__FreeBSD__) 150 #if defined(__FreeBSD__)
150 return timegm(&tparts); 151 return timegm(&tparts);
151 #elif defined(_WIN32) 152 #elif defined(_WIN32)
152 return mktime(&tparts); 153 return _mkgmtime(&tparts);
153 #else 154 #else
154 return mktime(&tparts) - timezone; 155 return mktime(&tparts) - timezone;
155 #endif 156 #endif
156 } else if(tzinfo.ptr[0] == '+' || tzinfo.ptr[0] == '-') { 157 } else if(tzinfo.ptr[0] == '+' || tzinfo.ptr[0] == '-') {
157 int sign = (tzinfo.ptr[0] == '+') ? -1 : 1; 158 int sign = (tzinfo.ptr[0] == '+') ? -1 : 1;
164 val = atol(conv); 165 val = atol(conv);
165 val = 60 * (val / 100) + (val % 100); 166 val = 60 * (val / 100) + (val % 100);
166 #if defined(__FreeBSD__) 167 #if defined(__FreeBSD__)
167 return timegm(&tparts) + (time_t) (60 * val * sign); 168 return timegm(&tparts) + (time_t) (60 * val * sign);
168 #elif defined(_WIN32) 169 #elif defined(_WIN32)
169 return mktime(&tparts) + (time_t)(60 * val * sign); 170 return _mkgmtime(&tparts) + (time_t)(60 * val * sign);
170 #else 171 #else
171 return mktime(&tparts) - timezone + (time_t) (60 * val * sign); 172 return mktime(&tparts) - timezone + (time_t) (60 * val * sign);
172 #endif 173 #endif
173 } 174 }
174 } else { 175 } else {

mercurial