Chromium Code Reviews| Index: base/time/time_mac.cc |
| diff --git a/base/time/time_mac.cc b/base/time/time_mac.cc |
| index c75423df9c2229e50fd102efe760191b950a4c71..93aeecb3ffdacc29fdf601fc7b50357c056618e8 100644 |
| --- a/base/time/time_mac.cc |
| +++ b/base/time/time_mac.cc |
| @@ -118,25 +118,6 @@ namespace base { |
| // Time ----------------------------------------------------------------------- |
| -// Core Foundation uses a double second count since 2001-01-01 00:00:00 UTC. |
| -// The UNIX epoch is 1970-01-01 00:00:00 UTC. |
| -// Windows uses a Gregorian epoch of 1601. We need to match this internally |
| -// so that our time representations match across all platforms. See bug 14734. |
| -// irb(main):010:0> Time.at(0).getutc() |
| -// => Thu Jan 01 00:00:00 UTC 1970 |
| -// irb(main):011:0> Time.at(-11644473600).getutc() |
| -// => Mon Jan 01 00:00:00 UTC 1601 |
| -static const int64_t kWindowsEpochDeltaSeconds = INT64_C(11644473600); |
| - |
| -// static |
| -const int64_t Time::kWindowsEpochDeltaMicroseconds = |
| - kWindowsEpochDeltaSeconds * Time::kMicrosecondsPerSecond; |
| - |
| -// Some functions in time.cc use time_t directly, so we provide an offset |
| -// to convert from time_t (Unix epoch) and internal (Windows epoch). |
| -// static |
| -const int64_t Time::kTimeTToMicrosecondsOffset = kWindowsEpochDeltaMicroseconds; |
| - |
| // static |
| Time Time::Now() { |
| return FromCFAbsoluteTime(CFAbsoluteTimeGetCurrent()); |
| @@ -152,7 +133,7 @@ Time Time::FromCFAbsoluteTime(CFAbsoluteTime t) { |
| return Max(); |
| return Time(static_cast<int64_t>((t + kCFAbsoluteTimeIntervalSince1970) * |
| kMicrosecondsPerSecond) + |
| - kWindowsEpochDeltaMicroseconds); |
| + kTimeTToMicrosecondsOffset); |
| } |
| CFAbsoluteTime Time::ToCFAbsoluteTime() const { |
| @@ -162,8 +143,9 @@ CFAbsoluteTime Time::ToCFAbsoluteTime() const { |
| return 0; // Consider 0 as a null Time. |
| if (is_max()) |
| return std::numeric_limits<CFAbsoluteTime>::infinity(); |
| - return (static_cast<CFAbsoluteTime>(us_ - kWindowsEpochDeltaMicroseconds) / |
| - kMicrosecondsPerSecond) - kCFAbsoluteTimeIntervalSince1970; |
| + return (static_cast<CFAbsoluteTime>(us_ - kTimeTToMicrosecondsOffset) / |
| + kMicrosecondsPerSecond) - |
| + kCFAbsoluteTimeIntervalSince1970; |
| } |
| // static |
| @@ -194,7 +176,7 @@ bool Time::FromExploded(bool is_local, const Exploded& exploded, Time* time) { |
| // microseconds and then cast to int64. If |
| // it cannot be suited to int64, then fail to avoid overflows. |
| double microseconds = |
| - (seconds * kMicrosecondsPerSecond) + kWindowsEpochDeltaMicroseconds; |
| + (seconds * kMicrosecondsPerSecond) + kTimeTToMicrosecondsOffset; |
| if (microseconds > std::numeric_limits<int64_t>::max() || |
| microseconds < std::numeric_limits<int64_t>::min()) { |
| *time = Time(0); |
| @@ -229,7 +211,7 @@ void Time::Explode(bool is_local, Exploded* exploded) const { |
| if (microsecond < 0) |
| microsecond += kMicrosecondsPerSecond; |
| CFAbsoluteTime seconds = ((us_ - microsecond) / kMicrosecondsPerSecond) - |
| - kWindowsEpochDeltaSeconds - |
| + kTimeTToMicrosecondsOffset - |
|
miu
2017/05/18 02:52:38
Note: Trybot unit tests caught my erroneous replac
Lei Zhang
2017/05/18 19:06:13
Horray for tests!
|
| kCFAbsoluteTimeIntervalSince1970; |
| base::ScopedCFTypeRef<CFTimeZoneRef> time_zone( |