Updating trunk VERSION from 833.0 to 834.0
[chromium-blink-merge.git] / base / time.cc
blob766f599fc05f1299e340d0ca73e62fcfa471e711
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/time.h"
6 #include "base/sys_string_conversions.h"
7 #include "base/third_party/nspr/prtime.h"
9 #include "base/logging.h"
11 namespace base {
13 // TimeDelta ------------------------------------------------------------------
15 int TimeDelta::InDays() const {
16 return static_cast<int>(delta_ / Time::kMicrosecondsPerDay);
19 int TimeDelta::InHours() const {
20 return static_cast<int>(delta_ / Time::kMicrosecondsPerHour);
23 int TimeDelta::InMinutes() const {
24 return static_cast<int>(delta_ / Time::kMicrosecondsPerMinute);
27 double TimeDelta::InSecondsF() const {
28 return static_cast<double>(delta_) / Time::kMicrosecondsPerSecond;
31 int64 TimeDelta::InSeconds() const {
32 return delta_ / Time::kMicrosecondsPerSecond;
35 double TimeDelta::InMillisecondsF() const {
36 return static_cast<double>(delta_) / Time::kMicrosecondsPerMillisecond;
39 int64 TimeDelta::InMilliseconds() const {
40 return delta_ / Time::kMicrosecondsPerMillisecond;
43 int64 TimeDelta::InMillisecondsRoundedUp() const {
44 return (delta_ + Time::kMicrosecondsPerMillisecond - 1) /
45 Time::kMicrosecondsPerMillisecond;
48 int64 TimeDelta::InMicroseconds() const {
49 return delta_;
52 // Time -----------------------------------------------------------------------
54 // static
55 Time Time::FromTimeT(time_t tt) {
56 if (tt == 0)
57 return Time(); // Preserve 0 so we can tell it doesn't exist.
58 return Time((tt * kMicrosecondsPerSecond) + kTimeTToMicrosecondsOffset);
61 time_t Time::ToTimeT() const {
62 if (us_ == 0)
63 return 0; // Preserve 0 so we can tell it doesn't exist.
64 return (us_ - kTimeTToMicrosecondsOffset) / kMicrosecondsPerSecond;
67 // static
68 Time Time::FromDoubleT(double dt) {
69 if (dt == 0)
70 return Time(); // Preserve 0 so we can tell it doesn't exist.
71 return Time(static_cast<int64>((dt *
72 static_cast<double>(kMicrosecondsPerSecond)) +
73 kTimeTToMicrosecondsOffset));
76 double Time::ToDoubleT() const {
77 if (us_ == 0)
78 return 0; // Preserve 0 so we can tell it doesn't exist.
79 return (static_cast<double>(us_ - kTimeTToMicrosecondsOffset) /
80 static_cast<double>(kMicrosecondsPerSecond));
83 // static
84 Time Time::UnixEpoch() {
85 Time time;
86 time.us_ = kTimeTToMicrosecondsOffset;
87 return time;
90 Time Time::LocalMidnight() const {
91 Exploded exploded;
92 LocalExplode(&exploded);
93 exploded.hour = 0;
94 exploded.minute = 0;
95 exploded.second = 0;
96 exploded.millisecond = 0;
97 return FromLocalExploded(exploded);
100 // static
101 bool Time::FromString(const wchar_t* time_string, Time* parsed_time) {
102 DCHECK((time_string != NULL) && (parsed_time != NULL));
103 std::string ascii_time_string = SysWideToUTF8(time_string);
104 if (ascii_time_string.length() == 0)
105 return false;
106 PRTime result_time = 0;
107 PRStatus result = PR_ParseTimeString(ascii_time_string.c_str(), PR_FALSE,
108 &result_time);
109 if (PR_SUCCESS != result)
110 return false;
111 result_time += kTimeTToMicrosecondsOffset;
112 *parsed_time = Time(result_time);
113 return true;
116 // Time::Exploded -------------------------------------------------------------
118 inline bool is_in_range(int value, int lo, int hi) {
119 return lo <= value && value <= hi;
122 bool Time::Exploded::HasValidValues() const {
123 return is_in_range(month, 1, 12) &&
124 is_in_range(day_of_week, 0, 6) &&
125 is_in_range(day_of_month, 1, 31) &&
126 is_in_range(hour, 0, 23) &&
127 is_in_range(minute, 0, 59) &&
128 is_in_range(second, 0, 60) &&
129 is_in_range(millisecond, 0, 999);
132 } // namespace base