| /* |
| Copyright 2014 Google Inc. |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| |
| #include "base/time.h" |
| #include "base/logging.h" |
| |
| namespace base { |
| |
| // TimeDelta ------------------------------------------------------------------ |
| |
| int TimeDelta::InDays() const { |
| return static_cast<int>(delta_ / Time::kMicrosecondsPerDay); |
| } |
| |
| int TimeDelta::InHours() const { |
| return static_cast<int>(delta_ / Time::kMicrosecondsPerHour); |
| } |
| |
| int TimeDelta::InMinutes() const { |
| return static_cast<int>(delta_ / Time::kMicrosecondsPerMinute); |
| } |
| |
| double TimeDelta::InSecondsF() const { |
| return static_cast<double>(delta_) / Time::kMicrosecondsPerSecond; |
| } |
| |
| int64 TimeDelta::InSeconds() const { |
| return delta_ / Time::kMicrosecondsPerSecond; |
| } |
| |
| double TimeDelta::InMillisecondsF() const { |
| return static_cast<double>(delta_) / Time::kMicrosecondsPerMillisecond; |
| } |
| |
| int64 TimeDelta::InMilliseconds() const { |
| return delta_ / Time::kMicrosecondsPerMillisecond; |
| } |
| |
| int64 TimeDelta::InMillisecondsRoundedUp() const { |
| return (delta_ + Time::kMicrosecondsPerMillisecond - 1) / |
| Time::kMicrosecondsPerMillisecond; |
| } |
| |
| int64 TimeDelta::InMicroseconds() const { |
| return delta_; |
| } |
| |
| // Time ----------------------------------------------------------------------- |
| |
| // static |
| Time Time::FromTimeT(time_t tt) { |
| if (tt == 0) |
| return Time(); // Preserve 0 so we can tell it doesn't exist. |
| return Time((tt * kMicrosecondsPerSecond) + kTimeTToMicrosecondsOffset); |
| } |
| |
| time_t Time::ToTimeT() const { |
| if (us_ == 0) |
| return 0; // Preserve 0 so we can tell it doesn't exist. |
| return (us_ - kTimeTToMicrosecondsOffset) / kMicrosecondsPerSecond; |
| } |
| |
| // static |
| Time Time::FromDoubleT(double dt) { |
| if (dt == 0) |
| return Time(); // Preserve 0 so we can tell it doesn't exist. |
| return Time(static_cast<int64>((dt * |
| static_cast<double>(kMicrosecondsPerSecond)) + |
| kTimeTToMicrosecondsOffset)); |
| } |
| |
| double Time::ToDoubleT() const { |
| if (us_ == 0) |
| return 0; // Preserve 0 so we can tell it doesn't exist. |
| return (static_cast<double>(us_ - kTimeTToMicrosecondsOffset) / |
| static_cast<double>(kMicrosecondsPerSecond)); |
| } |
| |
| // static |
| Time Time::UnixEpoch() { |
| Time time; |
| time.us_ = kTimeTToMicrosecondsOffset; |
| return time; |
| } |
| |
| Time Time::LocalMidnight() const { |
| Exploded exploded; |
| LocalExplode(&exploded); |
| exploded.hour = 0; |
| exploded.minute = 0; |
| exploded.second = 0; |
| exploded.millisecond = 0; |
| return FromLocalExploded(exploded); |
| } |
| |
| // Time::Exploded ------------------------------------------------------------- |
| |
| inline bool is_in_range(int value, int lo, int hi) { |
| return lo <= value && value <= hi; |
| } |
| |
| bool Time::Exploded::HasValidValues() const { |
| return is_in_range(month, 1, 12) && |
| is_in_range(day_of_week, 0, 6) && |
| is_in_range(day_of_month, 1, 31) && |
| is_in_range(hour, 0, 23) && |
| is_in_range(minute, 0, 59) && |
| is_in_range(second, 0, 60) && |
| is_in_range(millisecond, 0, 999); |
| } |
| |
| } // namespace base |