2 * Utility.cpp - TaskJuggler
4 * Copyright (c) 2001, 2002 by Chris Schlaeger <cs@suse.de>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of version 2 of the GNU General Public License as
8 * published by the Free Software Foundation.
18 static QDict<const char> TZDict;
19 static bool TZDictReady = FALSE;
22 timezone2tz(const char* tzone)
26 TZDict.insert("PST", "GMP8:00");
27 TZDict.insert("PDT", "GMT7:00");
28 TZDict.insert("MST", "GMT7:00");
29 TZDict.insert("MDT", "GMT6:00");
30 TZDict.insert("CST", "GMT6:00");
31 TZDict.insert("CDT", "GMT5:00");
32 TZDict.insert("EST", "GMT5:00");
33 TZDict.insert("EDT", "GMT4:00");
34 TZDict.insert("CET", "GMT-1:00");
35 TZDict.insert("CEST", "GMT-2:00");
44 monthAndYear(time_t t)
46 struct tm* tms = localtime(&t);
48 strftime(s, sizeof(s), "%b %Y", tms);
55 struct tm* tms = localtime(&t);
56 return (tms->tm_wday < 1 || tms->tm_wday > 5);
60 daysLeftInMonth(time_t t)
63 struct tm* tms = localtime(&t);
64 for (int m = tms->tm_mon; tms->tm_mon == m;
65 t = sameTimeNextDay(t), localtime(&t))
73 weeksLeftInMonth(time_t t)
76 struct tm* tms = localtime(&t);
77 for (int m = tms->tm_mon; tms->tm_mon == m;
78 t = sameTimeNextWeek(t), localtime(&t))
86 monthLeftInYear(time_t t)
89 struct tm* tms = localtime(&t);
90 for (int m = tms->tm_year; tms->tm_year == m;
91 t = sameTimeNextMonth(t), localtime(&t))
99 daysBetween(time_t t1, time_t t2)
102 // TODO: Very slow!!!
103 for (time_t t = t1; t < t2; t = sameTimeNextDay(t))
109 weeksBetween(time_t t1, time_t t2)
112 // TODO: Very slow!!!
113 for (time_t t = t1; t < t2; t = sameTimeNextWeek(t))
119 monthsBetween(time_t t1, time_t t2)
122 // TODO: Very slow!!!
123 for (time_t t = t1; t < t2; t = sameTimeNextMonth(t))
131 struct tm* tms = localtime(&t);
138 time_t boy = beginOfYear(t);
139 struct tm* tms = localtime(&boy);
141 for (i = 0; tms->tm_wday != 0; boy = sameTimeNextDay(boy))
142 tms = localtime(&boy);
143 // If t is in last year's week, we have to do it again for last year.
146 boy = beginOfYear(sameTimeLastYear(t));
147 tms = localtime(&boy);
148 for (i = 0; tms->tm_wday != 0; boy = sameTimeNextDay(boy))
149 tms = localtime(&boy);
152 return (tms->tm_yday - i) / 7 + 1;
156 monthOfYear(time_t t)
158 struct tm* tms = localtime(&t);
159 return tms->tm_mon + 1;
165 struct tm* tms = localtime(&t);
172 struct tm* tms = localtime(&t);
173 return tms->tm_year + 1900;
179 struct tm* tms = localtime(&t);
180 tms->tm_sec = tms->tm_min = tms->tm_hour = 0;
186 beginOfWeek(time_t t)
189 for (tms = localtime(&t) ; tms->tm_wday != 0;
190 t = sameTimeYesterday(t), tms = localtime(&t))
192 tms->tm_sec = tms->tm_min = tms->tm_hour = 0;
198 beginOfMonth(time_t t)
200 struct tm* tms = localtime(&t);
202 tms->tm_sec = tms->tm_min = tms->tm_hour = 0;
208 beginOfYear(time_t t)
210 struct tm* tms = localtime(&t);
213 tms->tm_sec = tms->tm_min = tms->tm_hour = 0;
219 sameTimeNextDay(time_t t)
221 struct tm* tms = localtime(&t);
228 sameTimeYesterday(time_t t)
230 struct tm* tms = localtime(&t);
237 sameTimeNextWeek(time_t t)
239 struct tm* tms = localtime(&t);
240 int weekday = tms->tm_wday;
243 t = sameTimeNextDay(t);
245 } while (tms->tm_wday != weekday);
251 sameTimeNextMonth(time_t t)
253 struct tm* tms = localtime(&t);
260 sameTimeNextYear(time_t t)
262 struct tm* tms = localtime(&t);
269 sameTimeLastYear(time_t t)
271 struct tm* tms = localtime(&t);
277 QString time2ISO(time_t t)
279 struct tm* tms = localtime(&t);
280 static char buf[128];
282 strftime(buf, 127, "%Y-%m-%d %H:%M %Z", tms);
286 QString time2tjp(time_t t)
288 struct tm* tms = localtime(&t);
289 static char buf[128];
291 strftime(buf, 127, "%Y-%m-%d-%H:%M:%S-%Z", tms);
295 QString time2time(time_t t)
297 struct tm* tms = localtime(&t);
298 static char buf[128];
300 strftime(buf, 127, "%H:%M %Z", tms);
304 QString time2date(time_t t)
306 struct tm* tms = localtime(&t);
307 static char buf[128];
309 strftime(buf, 127, "%Y-%m-%d", tms);
314 addTimeToDate(time_t day, time_t hour)
317 struct tm* tms = localtime(&day);
319 tms->tm_hour = hour / (60 * 60);
320 tms->tm_min = (hour / 60) % 60;
321 tms->tm_sec = hour % 60;
328 time_t dateToTime( const QString& date)
330 int y, m, d, hour, min;
331 if (date.find(':') == -1)
333 sscanf(date, "%d-%d-%d", &y, &m, &d);
337 sscanf(date, "%d-%d-%d-%d:%d", &y, &m, &d, &hour, &min);
352 struct tm t = { 0, min, hour, d, m - 1, y - 1900, 0, 0, -1, 0, 0 };
353 time_t localTime = mktime(&t);