|
1 /* |
|
2 * Copyright (C) 1999-2000 Harri Porten (porten@kde.org) |
|
3 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. |
|
4 * |
|
5 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
|
6 * |
|
7 * The contents of this file are subject to the Mozilla Public License Version |
|
8 * 1.1 (the "License"); you may not use this file except in compliance with |
|
9 * the License. You may obtain a copy of the License at |
|
10 * http://www.mozilla.org/MPL/ |
|
11 * |
|
12 * Software distributed under the License is distributed on an "AS IS" basis, |
|
13 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License |
|
14 * for the specific language governing rights and limitations under the |
|
15 * License. |
|
16 * |
|
17 * The Original Code is Mozilla Communicator client code, released |
|
18 * March 31, 1998. |
|
19 * |
|
20 * The Initial Developer of the Original Code is |
|
21 * Netscape Communications Corporation. |
|
22 * Portions created by the Initial Developer are Copyright (C) 1998 |
|
23 * the Initial Developer. All Rights Reserved. |
|
24 * |
|
25 * Contributor(s): |
|
26 * |
|
27 * Alternatively, the contents of this file may be used under the terms of |
|
28 * either of the GNU General Public License Version 2 or later (the "GPL"), |
|
29 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), |
|
30 * in which case the provisions of the GPL or the LGPL are applicable instead |
|
31 * of those above. If you wish to allow use of your version of this file only |
|
32 * under the terms of either the GPL or the LGPL, and not to allow others to |
|
33 * use your version of this file under the terms of the MPL, indicate your |
|
34 * decision by deleting the provisions above and replace them with the notice |
|
35 * and other provisions required by the GPL or the LGPL. If you do not delete |
|
36 * the provisions above, a recipient may use your version of this file under |
|
37 * the terms of any one of the MPL, the GPL or the LGPL. |
|
38 * |
|
39 */ |
|
40 |
|
41 #ifndef DateMath_h |
|
42 #define DateMath_h |
|
43 |
|
44 #include <time.h> |
|
45 #include <string.h> |
|
46 #include <wtf/Noncopyable.h> |
|
47 #if PLATFORM(SYMBIAN) |
|
48 #include <e32std.h> |
|
49 #endif |
|
50 |
|
51 namespace KJS { |
|
52 |
|
53 struct GregorianDateTime; |
|
54 |
|
55 void msToGregorianDateTime(double, bool outputIsUTC, GregorianDateTime&); |
|
56 double gregorianDateTimeToMS(const GregorianDateTime&, double, bool inputIsUTC); |
|
57 double getUTCOffset(); |
|
58 int equivalentYearForDST(int year); |
|
59 double getCurrentUTCTime(); |
|
60 |
|
61 const char * const weekdayName[7] = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" }; |
|
62 const char * const monthName[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; |
|
63 |
|
64 const double hoursPerDay = 24.0; |
|
65 const double minutesPerHour = 60.0; |
|
66 const double secondsPerHour = 60.0 * 60.0; |
|
67 const double secondsPerMinute = 60.0; |
|
68 const double msPerSecond = 1000.0; |
|
69 const double msPerMinute = 60.0 * 1000.0; |
|
70 const double msPerHour = 60.0 * 60.0 * 1000.0; |
|
71 const double msPerDay = 24.0 * 60.0 * 60.0 * 1000.0; |
|
72 |
|
73 // Intentionally overridding the default tm of the system |
|
74 // Not all OS' have the same members of their tm's |
|
75 struct GregorianDateTime : Noncopyable { |
|
76 GregorianDateTime() |
|
77 : second(0) |
|
78 , minute(0) |
|
79 , hour(0) |
|
80 , weekDay(0) |
|
81 , monthDay(0) |
|
82 , yearDay(0) |
|
83 , month(0) |
|
84 , year(0) |
|
85 , isDST(0) |
|
86 , utcOffset(0) |
|
87 , timeZone(0) |
|
88 { |
|
89 } |
|
90 |
|
91 ~GregorianDateTime() |
|
92 { |
|
93 delete [] timeZone; |
|
94 } |
|
95 |
|
96 GregorianDateTime(const tm& inTm) |
|
97 : second(inTm.tm_sec) |
|
98 , minute(inTm.tm_min) |
|
99 , hour(inTm.tm_hour) |
|
100 , weekDay(inTm.tm_wday) |
|
101 , monthDay(inTm.tm_mday) |
|
102 , yearDay(inTm.tm_yday) |
|
103 , month(inTm.tm_mon) |
|
104 , year(inTm.tm_year) |
|
105 , isDST(inTm.tm_isdst) |
|
106 { |
|
107 #if !PLATFORM(WIN_OS) && !PLATFORM(SYMBIAN) |
|
108 utcOffset = static_cast<int>(inTm.tm_gmtoff); |
|
109 |
|
110 int inZoneSize = strlen(inTm.tm_zone) + 1; |
|
111 timeZone = new char[inZoneSize]; |
|
112 strncpy(timeZone, inTm.tm_zone, inZoneSize); |
|
113 #elif PLATFORM(SYMBIAN) |
|
114 utcOffset = User::UTCOffset().Int(); |
|
115 timeZone = 0; |
|
116 #else |
|
117 utcOffset = static_cast<int>(getUTCOffset() / msPerSecond + (isDST ? secondsPerHour : 0)); |
|
118 timeZone = 0; |
|
119 #endif |
|
120 } |
|
121 |
|
122 operator tm() const |
|
123 { |
|
124 tm ret; |
|
125 memset(&ret, 0, sizeof(ret)); |
|
126 |
|
127 ret.tm_sec = second; |
|
128 ret.tm_min = minute; |
|
129 ret.tm_hour = hour; |
|
130 ret.tm_wday = weekDay; |
|
131 ret.tm_mday = monthDay; |
|
132 ret.tm_yday = yearDay; |
|
133 ret.tm_mon = month; |
|
134 ret.tm_year = year; |
|
135 ret.tm_isdst = isDST; |
|
136 |
|
137 #if !PLATFORM(WIN_OS) && !PLATFORM(SYMBIAN) |
|
138 ret.tm_gmtoff = static_cast<long>(utcOffset); |
|
139 ret.tm_zone = timeZone; |
|
140 #endif |
|
141 |
|
142 return ret; |
|
143 } |
|
144 |
|
145 int second; |
|
146 int minute; |
|
147 int hour; |
|
148 int weekDay; |
|
149 int monthDay; |
|
150 int yearDay; |
|
151 int month; |
|
152 int year; |
|
153 int isDST; |
|
154 int utcOffset; |
|
155 char* timeZone; |
|
156 }; |
|
157 |
|
158 } //namespace KJS |
|
159 |
|
160 #endif // DateMath_h |