OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999-2000 Harri Porten (porten@kde.org) | 2 * Copyright (C) 1999-2000 Harri Porten (porten@kde.org) |
3 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. | 3 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. |
4 * Copyright (C) 2009 Google Inc. All rights reserved. | 4 * Copyright (C) 2009 Google Inc. All rights reserved. |
5 * Copyright (C) 2007-2009 Torch Mobile, Inc. | 5 * Copyright (C) 2007-2009 Torch Mobile, Inc. |
6 * Copyright (C) 2010 &yet, LLC. (nate@andyet.net) | 6 * Copyright (C) 2010 &yet, LLC. (nate@andyet.net) |
7 * | 7 * |
8 * The Original Code is Mozilla Communicator client code, released | 8 * The Original Code is Mozilla Communicator client code, released |
9 * March 31, 1998. | 9 * March 31, 1998. |
10 * | 10 * |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 #endif | 92 #endif |
93 | 93 |
94 namespace WTF { | 94 namespace WTF { |
95 | 95 |
96 /* Constants */ | 96 /* Constants */ |
97 | 97 |
98 static const double hoursPerDay = 24.0; | 98 static const double hoursPerDay = 24.0; |
99 static const double secondsPerDay = 24.0 * 60.0 * 60.0; | 99 static const double secondsPerDay = 24.0 * 60.0 * 60.0; |
100 | 100 |
101 static const double maxUnixTime = 2145859200.0; // 12/31/2037 | 101 static const double maxUnixTime = 2145859200.0; // 12/31/2037 |
| 102 static const double kMinimumECMADateInMs = -8640000000000000.0; |
| 103 static const double kMaximumECMADateInMs = 8640000000000000.0; |
102 | 104 |
103 // Day of year for the first day of each month, where index 0 is January, and da
y 0 is January 1. | 105 // Day of year for the first day of each month, where index 0 is January, and da
y 0 is January 1. |
104 // First for non-leap years, then for leap years. | 106 // First for non-leap years, then for leap years. |
105 static const int firstDayOfMonth[2][12] = { | 107 static const int firstDayOfMonth[2][12] = { |
106 {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}, | 108 {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}, |
107 {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335} | 109 {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335} |
108 }; | 110 }; |
109 | 111 |
110 static inline void getLocalTime(const time_t* localTime, struct tm* localTM) | 112 static inline void getLocalTime(const time_t* localTime, struct tm* localTM) |
111 { | 113 { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 static void appendTwoDigitNumber(StringBuilder& builder, int number) | 161 static void appendTwoDigitNumber(StringBuilder& builder, int number) |
160 { | 162 { |
161 ASSERT(number >= 0 && number < 100); | 163 ASSERT(number >= 0 && number < 100); |
162 if (number <= 9) | 164 if (number <= 9) |
163 builder.append('0'); | 165 builder.append('0'); |
164 builder.appendNumber(number); | 166 builder.appendNumber(number); |
165 } | 167 } |
166 | 168 |
167 int msToYear(double ms) | 169 int msToYear(double ms) |
168 { | 170 { |
| 171 DCHECK(std::isfinite(ms)); |
| 172 DCHECK_GE(ms, kMinimumECMADateInMs); |
| 173 DCHECK_LE(ms, kMaximumECMADateInMs); |
169 int approxYear = static_cast<int>(floor(ms / (msPerDay * 365.2425)) + 1970); | 174 int approxYear = static_cast<int>(floor(ms / (msPerDay * 365.2425)) + 1970); |
170 double msFromApproxYearTo1970 = msPerDay * daysFrom1970ToYear(approxYear); | 175 double msFromApproxYearTo1970 = msPerDay * daysFrom1970ToYear(approxYear); |
171 if (msFromApproxYearTo1970 > ms) | 176 if (msFromApproxYearTo1970 > ms) |
172 return approxYear - 1; | 177 return approxYear - 1; |
173 if (msFromApproxYearTo1970 + msPerDay * daysInYear(approxYear) <= ms) | 178 if (msFromApproxYearTo1970 + msPerDay * daysInYear(approxYear) <= ms) |
174 return approxYear + 1; | 179 return approxYear + 1; |
175 return approxYear; | 180 return approxYear; |
176 } | 181 } |
177 | 182 |
178 int dayInYear(double ms, int year) | 183 int dayInYear(double ms, int year) |
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
824 } | 829 } |
825 | 830 |
826 double convertToLocalTime(double ms) | 831 double convertToLocalTime(double ms) |
827 { | 832 { |
828 double utcOffset = calculateUTCOffset(); | 833 double utcOffset = calculateUTCOffset(); |
829 double dstOffset = calculateDSTOffset(ms, utcOffset); | 834 double dstOffset = calculateDSTOffset(ms, utcOffset); |
830 return (ms + utcOffset + dstOffset); | 835 return (ms + utcOffset + dstOffset); |
831 } | 836 } |
832 | 837 |
833 } // namespace WTF | 838 } // namespace WTF |
OLD | NEW |