Index: base/time/time_mac.cc |
diff --git a/base/time/time_mac.cc b/base/time/time_mac.cc |
index c23c4917e757f492ab7a6cc151158a55901878ef..82318ab36f6ee96022843bd3efed0d4857f7814a 100644 |
--- a/base/time/time_mac.cc |
+++ b/base/time/time_mac.cc |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2016 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -184,8 +184,24 @@ Time Time::FromExploded(bool is_local, const Exploded& exploded) { |
exploded.day_of_month, exploded.hour, exploded.minute, exploded.second, |
exploded.millisecond); |
CFAbsoluteTime seconds = absolute_time + kCFAbsoluteTimeIntervalSince1970; |
- return Time(static_cast<int64_t>(seconds * kMicrosecondsPerSecond) + |
- kWindowsEpochDeltaMicroseconds); |
+ |
+ base::Time t_time = |
+ Time(static_cast<int64_t>(seconds * kMicrosecondsPerSecond) + |
+ kWindowsEpochDeltaMicroseconds); |
+ |
+ // If |exploded.day_of_month| is set to 31 |
+ // on a 28-30 day month, it will return the first day of the next month. |
mmenke
2016/05/18 17:32:00
We should figure out what platforms this happens o
eroman
2016/05/18 19:35:17
In the case of our _posix implementation, the spec
mmenke
2016/05/18 20:11:32
That's a good point...I was mostly thinking (hopin
maksims (do not use this acc)
2016/05/19 09:57:20
What's then? Can you run trybots to see what envir
|
+ // Thus round-trip the time and compare the initial |exploded| with |
+ // |utc_to_exploded| time. |
+ // If they are not same, return Time(0). |
+ // Windows and Posix implementations return Time(0) on failure. |
mmenke
2016/05/18 17:32:00
These last two sentences seem not to be needed.
maksims (do not use this acc)
2016/05/19 09:57:20
Done.
|
+ base::Time::Exploded to_exploded = {0}; |
Mark Mentovai
2016/05/18 17:42:49
No need to waste time {0}-initializing.
maksims (do not use this acc)
2016/05/19 09:57:20
Done.
|
+ if (!is_local) |
+ t_time.UTCExplode(&to_exploded); |
+ else |
+ t_time.LocalExplode(&to_exploded); |
+ |
+ return to_exploded != exploded ? Time(0) : t_time; |
} |
void Time::Explode(bool is_local, Exploded* exploded) const { |