| 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 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 return year; | 351 return year; |
| 352 | 352 |
| 353 int quotient = difference / 28; | 353 int quotient = difference / 28; |
| 354 int product = (quotient) * 28; | 354 int product = (quotient) * 28; |
| 355 | 355 |
| 356 year += product; | 356 year += product; |
| 357 ASSERT((year >= minYear && year <= maxYear) || (product - year == static_cas
t<int>(std::numeric_limits<double>::quiet_NaN()))); | 357 ASSERT((year >= minYear && year <= maxYear) || (product - year == static_cas
t<int>(std::numeric_limits<double>::quiet_NaN()))); |
| 358 return year; | 358 return year; |
| 359 } | 359 } |
| 360 | 360 |
| 361 int32_t calculateUTCOffset() | 361 static int32_t calculateUTCOffset() |
| 362 { | 362 { |
| 363 #if OS(WIN) | 363 #if OS(WIN) |
| 364 TIME_ZONE_INFORMATION timeZoneInformation; | 364 TIME_ZONE_INFORMATION timeZoneInformation; |
| 365 GetTimeZoneInformation(&timeZoneInformation); | 365 GetTimeZoneInformation(&timeZoneInformation); |
| 366 int32_t bias = timeZoneInformation.Bias + timeZoneInformation.StandardBias; | 366 int32_t bias = timeZoneInformation.Bias + timeZoneInformation.StandardBias; |
| 367 return -bias * 60 * 1000; | 367 return -bias * 60 * 1000; |
| 368 #else | 368 #else |
| 369 time_t localTime = time(0); | 369 time_t localTime = time(0); |
| 370 tm localt; | 370 tm localt; |
| 371 getLocalTime(&localTime, &localt); | 371 getLocalTime(&localTime, &localt); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 | 424 |
| 425 double diff = ((localTM.tm_hour - offsetHour) * secondsPerHour) + ((localTM.
tm_min - offsetMinute) * 60); | 425 double diff = ((localTM.tm_hour - offsetHour) * secondsPerHour) + ((localTM.
tm_min - offsetMinute) * 60); |
| 426 | 426 |
| 427 if (diff < 0) | 427 if (diff < 0) |
| 428 diff += secondsPerDay; | 428 diff += secondsPerDay; |
| 429 | 429 |
| 430 return (diff * msPerSecond); | 430 return (diff * msPerSecond); |
| 431 } | 431 } |
| 432 | 432 |
| 433 // Get the DST offset, given a time in UTC | 433 // Get the DST offset, given a time in UTC |
| 434 double calculateDSTOffset(double ms, double utcOffset) | 434 static double calculateDSTOffset(double ms, double utcOffset) |
| 435 { | 435 { |
| 436 // On Mac OS X, the call to localtime (see calculateDSTOffsetSimple) will re
turn historically accurate | 436 // On Mac OS X, the call to localtime (see calculateDSTOffsetSimple) will re
turn historically accurate |
| 437 // DST information (e.g. New Zealand did not have DST from 1946 to 1974) how
ever the JavaScript | 437 // DST information (e.g. New Zealand did not have DST from 1946 to 1974) how
ever the JavaScript |
| 438 // standard explicitly dictates that historical information should not be co
nsidered when | 438 // standard explicitly dictates that historical information should not be co
nsidered when |
| 439 // determining DST. For this reason we shift away from years that localtime
can handle but would | 439 // determining DST. For this reason we shift away from years that localtime
can handle but would |
| 440 // return historically accurate information. | 440 // return historically accurate information. |
| 441 int year = msToYear(ms); | 441 int year = msToYear(ms); |
| 442 int equivalentYear = equivalentYearForDST(year); | 442 int equivalentYear = equivalentYearForDST(year); |
| 443 if (year != equivalentYear) { | 443 if (year != equivalentYear) { |
| 444 bool leapYear = isLeapYear(year); | 444 bool leapYear = isLeapYear(year); |
| (...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 874 stringBuilder.append(' '); | 874 stringBuilder.append(' '); |
| 875 | 875 |
| 876 stringBuilder.append(utcOffset > 0 ? '+' : '-'); | 876 stringBuilder.append(utcOffset > 0 ? '+' : '-'); |
| 877 int absoluteUTCOffset = abs(utcOffset); | 877 int absoluteUTCOffset = abs(utcOffset); |
| 878 stringBuilder.append(twoDigitStringFromNumber(absoluteUTCOffset / 60)); | 878 stringBuilder.append(twoDigitStringFromNumber(absoluteUTCOffset / 60)); |
| 879 stringBuilder.append(twoDigitStringFromNumber(absoluteUTCOffset % 60)); | 879 stringBuilder.append(twoDigitStringFromNumber(absoluteUTCOffset % 60)); |
| 880 | 880 |
| 881 return stringBuilder.toString(); | 881 return stringBuilder.toString(); |
| 882 } | 882 } |
| 883 | 883 |
| 884 double convertToLocalTime(double ms) |
| 885 { |
| 886 double utcOffset = calculateUTCOffset(); |
| 887 double dstOffset = calculateDSTOffset(ms, utcOffset); |
| 888 return (ms + utcOffset + dstOffset); |
| 889 } |
| 890 |
| 884 } // namespace WTF | 891 } // namespace WTF |
| OLD | NEW |