| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 // Dart core library. | 4 // Dart core library. |
| 5 | 5 |
| 6 class TimeZoneImplementation implements TimeZone { | 6 class TimeZoneImplementation implements TimeZone { |
| 7 const TimeZoneImplementation.utc() : isUtc = true; | 7 const TimeZoneImplementation.utc() : isUtc = true; |
| 8 TimeZoneImplementation.local() : isUtc = false {} | 8 TimeZoneImplementation.local() : isUtc = false {} |
| 9 | 9 |
| 10 bool operator ==(Object other) { | 10 bool operator ==(Object other) { |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 int compareTo(Date other) => value.compareTo(other.value); | 123 int compareTo(Date other) => value.compareTo(other.value); |
| 124 int hashCode() => value; | 124 int hashCode() => value; |
| 125 | 125 |
| 126 Date changeTimeZone(TimeZone targetTimeZone) { | 126 Date changeTimeZone(TimeZone targetTimeZone) { |
| 127 if (targetTimeZone === null) { | 127 if (targetTimeZone === null) { |
| 128 targetTimeZone = new TimeZoneImplementation.local(); | 128 targetTimeZone = new TimeZoneImplementation.local(); |
| 129 } | 129 } |
| 130 return new Date.fromEpoch(value, targetTimeZone); | 130 return new Date.fromEpoch(value, targetTimeZone); |
| 131 } | 131 } |
| 132 | 132 |
| 133 String get timeZoneName() { | |
| 134 if (isUtc()) return "UTC"; | |
| 135 return _timeZoneName(_equivalentSeconds(_secondsSinceEpoch)); | |
| 136 } | |
| 137 | |
| 138 Duration get timeZoneOffset() { | |
| 139 if (isUtc()) return new Duration(0); | |
| 140 int offsetInSeconds = | |
| 141 _timeZoneOffsetInSeconds(_equivalentSeconds(_secondsSinceEpoch)); | |
| 142 return new Duration(seconds: offsetInSeconds); | |
| 143 } | |
| 144 | |
| 145 int get year() { | 133 int get year() { |
| 146 int secondsSinceEpoch = _secondsSinceEpoch; | 134 int secondsSinceEpoch = _secondsSinceEpoch; |
| 147 // According to V8 some library calls have troubles with negative values. | 135 // According to V8 some library calls have troubles with negative values. |
| 148 // Therefore clamp to 0 - year 2035 (which is less than the size of 32bit). | 136 // Therefore clamp to 0 - year 2035 (which is less than the size of 32bit). |
| 149 if (secondsSinceEpoch >= 0 && secondsSinceEpoch < _SECONDS_YEAR_2035) { | 137 if (secondsSinceEpoch >= 0 && secondsSinceEpoch < _SECONDS_YEAR_2035) { |
| 150 return _getYear(secondsSinceEpoch, timeZone.isUtc); | 138 return _getYear(secondsSinceEpoch, timeZone.isUtc); |
| 151 } | 139 } |
| 152 | 140 |
| 153 // Approximate the result. We don't take timeZone into account. | 141 // Approximate the result. We don't take timeZone into account. |
| 154 int approximateYear = _yearsFromSecondsSinceEpoch(secondsSinceEpoch); | 142 int approximateYear = _yearsFromSecondsSinceEpoch(secondsSinceEpoch); |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 406 return adjustedSeconds * Duration.MILLISECONDS_PER_SECOND + milliseconds; | 394 return adjustedSeconds * Duration.MILLISECONDS_PER_SECOND + milliseconds; |
| 407 } | 395 } |
| 408 | 396 |
| 409 // Natives | 397 // Natives |
| 410 static _brokenDownDateToSecondsSinceEpoch( | 398 static _brokenDownDateToSecondsSinceEpoch( |
| 411 int years, int month, int day, int hours, int minutes, int seconds, | 399 int years, int month, int day, int hours, int minutes, int seconds, |
| 412 bool isUtc) native "DateNatives_brokenDownToSecondsSinceEpoch"; | 400 bool isUtc) native "DateNatives_brokenDownToSecondsSinceEpoch"; |
| 413 | 401 |
| 414 static int _getCurrentMs() native "DateNatives_currentTimeMillis"; | 402 static int _getCurrentMs() native "DateNatives_currentTimeMillis"; |
| 415 | 403 |
| 416 static String _timeZoneName(int secondsSinceEpoch) | |
| 417 native "DateNatives_timeZoneName"; | |
| 418 | |
| 419 static int _timeZoneOffsetInSeconds(int secondsSinceEpoch) | |
| 420 native "DateNatives_timeZoneOffsetInSeconds"; | |
| 421 | |
| 422 // TODO(floitsch): it would be more efficient if we didn't call the native | 404 // TODO(floitsch): it would be more efficient if we didn't call the native |
| 423 // function for every member, but cached the broken-down date. | 405 // function for every member, but cached the broken-down date. |
| 424 static int _getYear(int secondsSinceEpoch, bool isUtc) | 406 static int _getYear(int secondsSinceEpoch, bool isUtc) |
| 425 native "DateNatives_getYear"; | 407 native "DateNatives_getYear"; |
| 426 | 408 |
| 427 static int _getMonth(int secondsSinceEpoch, bool isUtc) | 409 static int _getMonth(int secondsSinceEpoch, bool isUtc) |
| 428 native "DateNatives_getMonth"; | 410 native "DateNatives_getMonth"; |
| 429 | 411 |
| 430 static int _getDay(int secondsSinceEpoch, bool isUtc) | 412 static int _getDay(int secondsSinceEpoch, bool isUtc) |
| 431 native "DateNatives_getDay"; | 413 native "DateNatives_getDay"; |
| 432 | 414 |
| 433 static int _getHours(int secondsSinceEpoch, bool isUtc) | 415 static int _getHours(int secondsSinceEpoch, bool isUtc) |
| 434 native "DateNatives_getHours"; | 416 native "DateNatives_getHours"; |
| 435 | 417 |
| 436 static int _getMinutes(int secondsSinceEpoch, bool isUtc) | 418 static int _getMinutes(int secondsSinceEpoch, bool isUtc) |
| 437 native "DateNatives_getMinutes"; | 419 native "DateNatives_getMinutes"; |
| 438 | 420 |
| 439 static int _getSeconds(int secondsSinceEpoch, bool isUtc) | 421 static int _getSeconds(int secondsSinceEpoch, bool isUtc) |
| 440 native "DateNatives_getSeconds"; | 422 native "DateNatives_getSeconds"; |
| 441 } | 423 } |
| OLD | NEW |