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 { |