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 |